Laden...

Forenbeiträge von mstoll Ingesamt 4 Beiträge

18.11.2011 - 11:13 Uhr

Hallo Rainbird,

vielen Dank für deinen Wrapper, er hat mir ebenfalls schon viel gebracht.
Da ich Items aus einer Liste holen muss, habe ich den Wrapper um eine Methode erweitert.


/// <summary>
/// Ruft das jeweilige Item ab
/// </summary>
/// <param name="index">
/// der Index 
/// </param>
/// <returns>
/// das Item
/// </returns>
public ComWrapper GetItem(int index)
{
    var result = this.realComObject.GetType().InvokeMember(string.Empty, BindingFlags.Default | BindingFlags.InvokeMethod, null, this.realComObject, new object[] { index });

    if (result != null)
    {
        return new ComWrapper(result);
    }

    return null;
}

Falls das mal jemand braucht (auch wenn der Beitrag schon alt ist), viel Spaß damit 😃

Beste Grüße

06.07.2010 - 08:37 Uhr

Hallo Forum,

ich habe ein Problem mit dem WPF-TreeView und hierarchischen DataTemplates.
Der TreeView soll an mein ViewModel gebunden werden.

Folgender XAML-Code:


 	
        <HierarchicalDataTemplate x:Key="hContractRule">
            <TreeViewItem Header="{Binding ContractRuleName}" IsExpanded="True" />
        </HierarchicalDataTemplate>

        
        <HierarchicalDataTemplate x:Key="hContractContent" >
            <TreeViewItem Header="{Binding ContractContentName}"   IsExpanded="True" ToolTip="{Binding Description}">
                <TreeViewItem Header="Regeln" ItemTemplate="{StaticResource hContractRule}" ItemsSource="{Binding ContractRules}">
                    <TreeViewItem.ContextMenu>
                        <ContextMenu>
                            <MenuItem Command="{Binding Source={StaticResource vmMain}, Path=AddContractContentRule}" Header="Regel hinzufügen"/>
                        </ContextMenu>
                    </TreeViewItem.ContextMenu>
                </TreeViewItem>
                <TreeViewItem.ContextMenu>
                    <ContextMenu>
                        <MenuItem Command="{Binding Source={StaticResource vmMain}, Path=DeleteContractContent}" Header="Vertragsinhalt löschen"/>
                    </ContextMenu>
                </TreeViewItem.ContextMenu>
            </TreeViewItem>
        </HierarchicalDataTemplate>

     
        <HierarchicalDataTemplate  x:Key="hContract">
            <TreeViewItem Header="{Binding ContractName}">
                <TreeViewItem Header="Vertragsinhalte"  ItemTemplate="{StaticResource hContractContent}" ItemsSource="{Binding ContractContents}">
                    <TreeViewItem.ContextMenu>
                        <ContextMenu>
                            <MenuItem Command="{Binding Source={StaticResource vmMain}, Path=AddContractContent}" Header="Vertragsinhalt hinzufügen"/>
                        </ContextMenu>
                    </TreeViewItem.ContextMenu>
                </TreeViewItem>
            </TreeViewItem>
        </HierarchicalDataTemplate>


Der TreeView wird wie folgt verwendet:


        <!--ContractView-->
        <TreeView x:Name="tvContractView"
                  OverridesDefaultStyle="False"
                    BorderThickness="0.5" 
                    Margin="20,10,10,10" 
                    VerticalAlignment="Top" 
                    BorderBrush="{x:Null}" Background="{x:Null}"
                    Grid.Row="2" 
                    ItemsSource="{Binding SearchedContracts}"
                    ItemTemplate="{StaticResource hContract}"
                    >

            <ts:CommandSource.Trigger>
                <ts:CommandTriggerGroup>
                    <ts:EventCommandTrigger
                        RoutedEvent="TreeView.SelectedItemChanged"
                        Command="{Binding ContractSelectedItemChanged}" 
                        CustomParameter="{Binding ElementName=tvContractView, Path=SelectedItem}"/>
                </ts:CommandTriggerGroup>
            </ts:CommandSource.Trigger>

        </TreeView>

Wird der Tree jetzt gefüllt wird er schonmal richtig dargestellt.
Das Problem liegt darin, dass ich die einzelnen Nodes nicht markieren kann.

BILD1

Hinzu kommt noch, dass sich die Nodes nichtmal aufklappen lassen wenn der Style, den wir für TreeViewItems angelegt haben, aktiv ist:

BILD2

Der Style beschreibt lediglich aussehen:


<Style d:IsControlPart="True" TargetType="{x:Type TreeViewItem}">
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="Foreground">
                    <Setter.Value>
                        <SolidColorBrush Color="{DynamicResource WhiteColor}"/>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
        <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
        <Setter Property="Padding" Value="1,0,0,0"/>
        <Setter Property="Template">
            <Setter.Value>
               <ControlTemplate TargetType="{x:Type TreeViewItem}">
                    <ControlTemplate.Resources>
                        <Storyboard x:Key="SelectedOn">
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SelectedBorder" Storyboard.TargetProperty="(UIElement.Opacity)">
                                <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="1"/>
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                        <Storyboard x:Key="SelectedOff">
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SelectedBorder" Storyboard.TargetProperty="(UIElement.Opacity)">
                                <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                        <Storyboard x:Key="HoverOn">
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="HoverBorder2" Storyboard.TargetProperty="(UIElement.Opacity)">
                                <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="1"/>
                            </DoubleAnimationUsingKeyFrames>
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="HoverBorder1" Storyboard.TargetProperty="(UIElement.Opacity)">
                                <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="0.5"/>
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                        <Storyboard x:Key="HoverOff">
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="HoverBorder2" Storyboard.TargetProperty="(UIElement.Opacity)">
                                <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
                            </DoubleAnimationUsingKeyFrames>
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="HoverBorder1" Storyboard.TargetProperty="(UIElement.Opacity)">
                                <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                        <Storyboard x:Key="SelectedHoverOn">
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SelectedHoverBorder" Storyboard.TargetProperty="(UIElement.Opacity)">
                                <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="1"/>
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                        <Storyboard x:Key="SelectedHoverOff">
                            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="SelectedHoverBorder" Storyboard.TargetProperty="(UIElement.Opacity)">
                                <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
                            </DoubleAnimationUsingKeyFrames>
                        </Storyboard>
                    </ControlTemplate.Resources>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition MinWidth="19" Width="Auto"/>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <ToggleButton x:Name="Expander" Style="{DynamicResource NuclearTreeViewItemToggleButton}" IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"/>
                        <Border Grid.Column="1" x:Name="Selection_Border" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
                            <Grid>
                                <Border Background="{DynamicResource NormalBrush}" BorderBrush="{DynamicResource NormalBorderBrush}" BorderThickness="2,2,2,2" CornerRadius="2,2,2,2" Opacity="0" x:Name="SelectedBorder"/>
                                <Border x:Name="HoverBorder1" Opacity="0" Background="{DynamicResource NormalBrush}" BorderBrush="{DynamicResource NormalBorderBrush}" BorderThickness="1,1,1,1" CornerRadius="2,2,2,2"/>
                                <Border x:Name="HoverBorder2" Opacity="0" Background="{DynamicResource HoverBrush}" BorderBrush="{x:Null}" BorderThickness="1,1,1,1" CornerRadius="2,2,2,2"/>
                                <ContentPresenter HorizontalAlignment="Stretch" TextElement.Foreground="White"  x:Name="PART_HeaderWhite" ContentSource="Header" d:LayoutOverrides="Width" Margin="3,2,3,2" Visibility="Collapsed"/>
                                <ContentPresenter HorizontalAlignment="Stretch" x:Name="PART_HeaderBlack" ContentSource="Header" Margin="3,2,3,2" d:LayoutOverrides="Width"/>
                                <Border x:Name="SelectedHoverBorder" Opacity="0" Background="{DynamicResource HoverBrush}" BorderBrush="{x:Null}" BorderThickness="1,1,1,1" CornerRadius="2,2,2,2"/>
                            </Grid>
                        </Border>
                        <ItemsPresenter Grid.Column="1" Grid.ColumnSpan="2" Grid.Row="1" x:Name="ItemsHost"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <MultiTrigger>
                            <MultiTrigger.ExitActions>
                                <BeginStoryboard Storyboard="{StaticResource SelectedHoverOff}" x:Name="SelectedHoverOff_BeginStoryboard"/>
                            </MultiTrigger.ExitActions>
                            <MultiTrigger.EnterActions>
                                <BeginStoryboard Storyboard="{StaticResource SelectedHoverOn}" x:Name="SelectedHoverOn_BeginStoryboard"/>
                            </MultiTrigger.EnterActions>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected" Value="True"/>
                                <Condition Property="IsMouseOver" Value="True"/>
                            </MultiTrigger.Conditions>
                        </MultiTrigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected" Value="False"/>
                                <Condition Property="IsMouseOver" SourceName="Selection_Border" Value="True"/>
                            </MultiTrigger.Conditions>
                            <MultiTrigger.ExitActions>
                                <BeginStoryboard x:Name="HoverOff_BeginStoryboard" Storyboard="{StaticResource HoverOff}"/>
                            </MultiTrigger.ExitActions>
                            <MultiTrigger.EnterActions>
                                <BeginStoryboard x:Name="HoverOn_BeginStoryboard" Storyboard="{StaticResource HoverOn}"/>
                            </MultiTrigger.EnterActions>
                        </MultiTrigger>
                        <Trigger Property="IsExpanded" Value="false">
                            <Setter Property="Visibility" Value="Collapsed" TargetName="ItemsHost"/>
                        </Trigger>
                        <Trigger Property="HasItems" Value="false">
                            <Setter Property="Visibility" Value="Hidden" TargetName="Expander"/>
                        </Trigger>
                        <Trigger Property="IsSelected" Value="true">
                            <Trigger.ExitActions>
                                <BeginStoryboard x:Name="SelectedOff_BeginStoryboard" Storyboard="{StaticResource SelectedOff}"/>
                            </Trigger.ExitActions>
                            <Trigger.EnterActions>
                                <BeginStoryboard Storyboard="{StaticResource SelectedOn}"/>
                            </Trigger.EnterActions>
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
                        </Trigger>
                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsSelected" Value="true"/>
                                <Condition Property="IsSelectionActive" Value="false"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" TargetName="Selection_Border"/>
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
                        </MultiTrigger>
                        <Trigger Property="IsEnabled" Value="false">
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Das der Style der zu bestimmten Typen hinterlegt ist Probleme macht und Dinge "überschreibt" ist mir jetzt schon mehrmals aufgefallen (auch Kontextmenüs, ...)

Könntet Ihr mir erklären an was das liegt, bzw. warum das so passiert?
Und welchen Ansatz sollte ich zur Lösung des Problems ausprobieren?

1. Warum funktioniert der TreeView mit meinen hDataTemplates nicht
2. Warum funktioniert er mit dem Style noch viel weniger
3. Habt ihr eine Erklärung für mein allgemeines Style Problem

Beste Grüße,
Max

ps.: kann ich nicht mehr als 1 Bild hinzufügen?

10.06.2010 - 15:11 Uhr

Hallo serial,

vielen Dank für deine Antwort.

mit den entsprechenden attributen dekoriert!

bringt mich leider nicht sonderlich weiter, hast du Informationen über die Attribute die verwendet werden müssen. Google liefert mir leider nicht...

Gruß,
Max

10.06.2010 - 10:49 Uhr

DB: MSSQL2008

Hallo Forum,

in einem Projekt soll das Entity Framework 4 eingesetzt werden. Verschiedene Klassen sowie die gesamte Datenbank sind schon vorhanden.
Ich suche jetzt schon seid ein paar Tagen nach einer Möglichkeit diese beiden Teile über das Entity Framework 4 zu verbinden.

Die Möglichkeit aus der Datenbank die Entities zu erzeugen ist zwar schön, bringt mich aber nicht zu meinem gewünschten Klassendiagramm.

Gibt es keine Möglichkeit vorhandene Klassen auf vorhandene Tabellen zu mappen?

Vielen Dank schonmal und Gruß,
Max