Fehler beim Stylen in der App.xaml - Das Element wurde bereits hinzugefügt

  • WPF

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Fehler beim Stylen in der App.xaml - Das Element wurde bereits hinzugefügt

    Hallo :)

    ich möchte meine ComboBoxen umstylen in meiner Application.xaml und renne in ein Problem. Folgenden Code fand ich in Internet und gleich in der Zeile 6 tritt beim kompilieren folgender Fehler auf:

    Nachricht = Zeilennummer "6" und Zeilenposition "6" von "Beim Festlegen der Eigenschaft "System.Windows.ResourceDictionary.DeferrableContent" wurde eine Ausnahme ausgelöst.".
    ArgumentException: Das Element wurde bereits hinzugefügt. Schlüssel im Wörterbuch: "System.Windows.Controls.ComboBox". Hinzuzufügender Schlüssel: "System.Windows.Controls.ComboBox".

    Hier mein XAML:

    Spoiler anzeigen

    XML-Quellcode

    1. <Application x:Class="Application"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:local="clr-namespace:StylishComboBoxTest"
    5. StartupUri="MainWindow.xaml">
    6. <Application.Resources>
    7. <Color x:Key="Vordergrundfarbe"/>
    8. <SolidColorBrush x:Key="VordergrundfarbeBrush"/>
    9. <ControlTemplate x:Key="CustomToggleButton" TargetType="ToggleButton">
    10. <Grid>
    11. <Border Name="Border" />
    12. <Border Name="SmallBorder" />
    13. <Path Name="Arrow" />
    14. </Grid>
    15. </ControlTemplate>
    16. <Style TargetType="{x:Type ComboBoxItem}">
    17. <Setter Property="FrameworkElement.OverridesDefaultStyle" Value="True" />
    18. <Setter Property="Control.Template">
    19. <Setter.Value>
    20. <ControlTemplate TargetType="{x:Type ComboBoxItem}">
    21. <Border>
    22. <ContentPresenter />
    23. </Border>
    24. </ControlTemplate>
    25. </Setter.Value>
    26. </Setter>
    27. </Style>
    28. <Style TargetType="{x:Type ComboBox}">
    29. <Setter Property="FrameworkElement.OverridesDefaultStyle" Value="True" />
    30. <Setter Property="Control.Template">
    31. <Setter.Value>
    32. <ControlTemplate TargetType="ComboBox">
    33. <Grid>
    34. <ToggleButton Template="{StaticResource CustomToggleButton}" />
    35. <ContentPresenter />
    36. <TextBox />
    37. <Popup>
    38. <Grid>
    39. <Border>
    40. <ScrollViewer>
    41. <ItemsPresenter />
    42. </ScrollViewer>
    43. </Border>
    44. </Grid>
    45. </Popup>
    46. </Grid>
    47. </ControlTemplate>
    48. </Setter.Value>
    49. </Setter>
    50. </Style>
    51. <ControlTemplate x:Key="CBCustomToggleButton" TargetType="ToggleButton">
    52. <Grid>
    53. <Border Name="Border"
    54. BorderThickness="1,1,1,1"/>
    55. <Border Name="SmallBorder"
    56. BorderThickness="0,0,1,0" />
    57. <Path Name="Arrow"
    58. Width="10"
    59. Data="M0,0 L0,2 L4,6 L8,2 L8,0 L4,4 z"
    60. Fill="{StaticResource ActiveBorderBrush}" />
    61. </Grid>
    62. <ControlTemplate.Triggers>
    63. <Trigger Property="UIElement.IsMouseOver" Value="True">
    64. <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource ActiveBorderBrush}" />
    65. <Setter TargetName="SmallBorder" Property="BorderBrush" Value="{StaticResource ActiveBorderBrush}" />
    66. <Setter TargetName="Arrow" Property="Fill" Value="White" />
    67. </Trigger>
    68. <Trigger Property="ToggleButton.IsChecked" Value="True">
    69. <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource ActiveBorderBrush}" />
    70. <Setter TargetName="SmallBorder" Property="BorderBrush" Value="{StaticResource ActiveBorderBrush}" />
    71. </Trigger>
    72. <Trigger Property="UIElement.IsEnabled" Value="False">
    73. </Trigger>
    74. </ControlTemplate.Triggers>
    75. </ControlTemplate>
    76. <Style TargetType="{x:Type ComboBox}">
    77. <Setter Property="Control.Template">
    78. <Setter.Value>
    79. <ControlTemplate TargetType="ComboBox">
    80. <Grid>
    81. <ToggleButton Name="ToggleButton"
    82. Template="{StaticResource CBCustomToggleButton}" />
    83. <ContentPresenter Name="ContentSite"
    84. Content="{TemplateBinding ComboBox.SelectionBoxItem}"
    85. ContentTemplate="{TemplateBinding ComboBox.SelectionBoxItemTemplate}"/>
    86. <TextBox x:Name="PART_EditableTextBox"
    87. Foreground="{TemplateBinding Foreground}"
    88. IsReadOnly="{TemplateBinding IsReadOnly}"
    89. Visibility="Hidden" />
    90. <Popup Name="PART_Popup"
    91. IsOpen="{TemplateBinding ComboBox.IsDropDownOpen}">
    92. <Grid Name="DropDown"
    93. MinWidth="{TemplateBinding FrameworkElement.ActualWidth}"
    94. MaxHeight="{TemplateBinding ComboBox.MaxDropDownHeight}"
    95. SnapsToDevicePixels="True">
    96. <Border Name="DropDownBorder"
    97. Background="{TemplateBinding ComboBox.Background}">
    98. <ScrollViewer Margin="4,6,4,6">
    99. <ItemsPresenter KeyboardNavigation.DirectionalNavigation="Contained" />
    100. </ScrollViewer>
    101. </Border>
    102. </Grid>
    103. </Popup>
    104. </Grid>
    105. <ControlTemplate.Triggers>
    106. <Trigger SourceName="PART_Popup" Property="Window.AllowsTransparency" Value="True">
    107. <Setter TargetName="DropDownBorder" Property="FrameworkElement.Margin" Value="0,2,0,0" />
    108. </Trigger>
    109. <Trigger Property="ComboBox.IsEditable" Value="True">
    110. <Setter Property="KeyboardNavigation.IsTabStop" Value="False" />
    111. <Setter TargetName="PART_EditableTextBox" Property="UIElement.Visibility" Value="Visible" />
    112. <Setter TargetName="ContentSite" Property="UIElement.Visibility" Value="Hidden" />
    113. </Trigger>
    114. </ControlTemplate.Triggers>
    115. </ControlTemplate>
    116. </Setter.Value>
    117. </Setter>
    118. </Style>
    119. </Application.Resources>
    120. </Application>


    Weiss jemand was dieser Fehler zu bedeuten hat?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „kafffee“ ()

    Hallo

    Naja, du hast ja auch zwei Styles für die Combobox definiert.
    Wenn du nun eine ComboBox erstellst, welchen Style soll die WPF denn dann für diese nehmen?
    Die geht ja nicht her und macht "Schnick, schnack, schnuck" und sucht sich was aus.

    Also entweder einen ​Key für einen der Styles vergeben oder einen der Styles Basierend auf den anderen setzen. Das geht auch mit ​BasedOn="{StaticResource baseStyle}" oder mit ​BasedOn="{StaticResource {x:Type ComboBox}}"

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Ah na klar :)

    Ich probier das mal aus...

    Edit:
    @Nofear23m

    Ja super danke das wars... :)

    Da waren noch andere Fehler drin, aber das Problem hatten mehrere also hab ich nen alternativen funktionierenden Code gefunden...

    Werd ich dann hier nachreichen bin bloss grad mit dem Handy unterwegs...

    Edit2:

    Hier mal der Code wie versprochen:

    Spoiler anzeigen

    XML-Quellcode

    1. ​<ControlTemplate x:Key="ComboBoxToggleButton" TargetType="{x:Type ToggleButton}">
    2. <Grid>
    3. <Grid.ColumnDefinitions>
    4. <ColumnDefinition />
    5. <ColumnDefinition Width="20" />
    6. </Grid.ColumnDefinitions>
    7. <Border
    8. x:Name="Border"
    9. Grid.ColumnSpan="2"
    10. CornerRadius="0"
    11. Background="Black"
    12. BorderBrush="{DynamicResource VordergrundfarbeBrush}"
    13. BorderThickness="1" />
    14. <Border
    15. Grid.Column="0"
    16. CornerRadius="0"
    17. Margin="1"
    18. Background="Black"
    19. BorderBrush="{DynamicResource VordergrundfarbeBrush}"
    20. BorderThickness="0,0,1,0" />
    21. <Path
    22. x:Name="Arrow"
    23. Grid.Column="1"
    24. Fill="{DynamicResource VordergrundfarbeBrush}"
    25. HorizontalAlignment="Center"
    26. VerticalAlignment="Center"
    27. Data="M0,0 L0,2 L4,6 L8,2 L8,0 L4,4 z"
    28. />
    29. </Grid>
    30. </ControlTemplate>
    31. <ControlTemplate x:Key="ComboBoxTextBox" TargetType="{x:Type TextBox}">
    32. <Border x:Name="PART_ContentHost" Focusable="False" Background="Black" />
    33. </ControlTemplate>
    34. <Style x:Key="{x:Type ComboBox}" TargetType="{x:Type ComboBox}">
    35. <Setter Property="SnapsToDevicePixels" Value="true"/>
    36. <Setter Property="OverridesDefaultStyle" Value="true"/>
    37. <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/>
    38. <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/>
    39. <Setter Property="ScrollViewer.CanContentScroll" Value="true"/>
    40. <Setter Property="MinWidth" Value="120"/>
    41. <Setter Property="MinHeight" Value="20"/>
    42. <Setter Property="Foreground" Value="{DynamicResource VordergrundfarbeBrush}"/>
    43. <Setter Property="Template">
    44. <Setter.Value>
    45. <ControlTemplate TargetType="{x:Type ComboBox}">
    46. <Grid>
    47. <ToggleButton
    48. Name="ToggleButton"
    49. Template="{StaticResource ComboBoxToggleButton}"
    50. Grid.Column="2"
    51. Focusable="false"
    52. IsChecked="{Binding Path=IsDropDownOpen,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"
    53. ClickMode="Press">
    54. </ToggleButton>
    55. <ContentPresenter Name="ContentSite" IsHitTestVisible="False" Content="{TemplateBinding SelectionBoxItem}"
    56. ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}"
    57. ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
    58. Margin="3,3,23,3"
    59. VerticalAlignment="Center"
    60. HorizontalAlignment="Left" />
    61. <TextBox x:Name="PART_EditableTextBox"
    62. Style="{x:Null}"
    63. Template="{StaticResource ComboBoxTextBox}"
    64. HorizontalAlignment="Left"
    65. VerticalAlignment="Center"
    66. Margin="3,3,23,3"
    67. Focusable="True"
    68. Background="Black"
    69. Foreground="{DynamicResource VordergrundfarbeBrush}"
    70. Visibility="Hidden"
    71. IsReadOnly="{TemplateBinding IsReadOnly}"/>
    72. <Popup
    73. Name="Popup"
    74. Placement="Bottom"
    75. IsOpen="{TemplateBinding IsDropDownOpen}"
    76. AllowsTransparency="True"
    77. Focusable="False"
    78. PopupAnimation="Slide">
    79. <Grid Name="DropDown"
    80. SnapsToDevicePixels="True"
    81. MinWidth="{TemplateBinding ActualWidth}"
    82. MaxHeight="{TemplateBinding MaxDropDownHeight}">
    83. <Border
    84. x:Name="DropDownBorder"
    85. Background="Black"
    86. BorderThickness="1"
    87. BorderBrush="{DynamicResource VordergrundfarbeBrush}"/>
    88. <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
    89. <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
    90. </ScrollViewer>
    91. </Grid>
    92. </Popup>
    93. </Grid>
    94. <ControlTemplate.Triggers>
    95. <Trigger Property="HasItems" Value="false">
    96. <Setter TargetName="DropDownBorder" Property="MinHeight" Value="95"/>
    97. </Trigger>
    98. <Trigger Property="IsEnabled" Value="false">
    99. <Setter Property="Foreground" Value="{DynamicResource VordergrundfarbeBrush}"/>
    100. </Trigger>
    101. <Trigger Property="IsGrouping" Value="true">
    102. <Setter Property="ScrollViewer.CanContentScroll" Value="false"/>
    103. </Trigger>
    104. <Trigger SourceName="Popup" Property="Popup.AllowsTransparency" Value="true">
    105. <Setter TargetName="DropDownBorder" Property="CornerRadius" Value="0"/>
    106. <Setter TargetName="DropDownBorder" Property="Margin" Value="0,2,0,0"/>
    107. </Trigger>
    108. <Trigger Property="IsEditable" Value="true">
    109. <Setter Property="IsTabStop" Value="false"/>
    110. <Setter TargetName="PART_EditableTextBox" Property="Visibility" Value="Visible"/>
    111. <Setter TargetName="ContentSite" Property="Visibility" Value="Hidden"/>
    112. </Trigger>
    113. </ControlTemplate.Triggers>
    114. </ControlTemplate>
    115. </Setter.Value>
    116. </Setter>
    117. <Style.Triggers>
    118. </Style.Triggers>
    119. </Style>
    120. <!-- SimpleStyles: ComboBoxItem -->
    121. <Style x:Key="{x:Type ComboBoxItem}" TargetType="{x:Type ComboBoxItem}">
    122. <Setter Property="SnapsToDevicePixels" Value="true"/>
    123. <Setter Property="Foreground" Value="{DynamicResource VordergrundfarbeBrush}"/>
    124. <Setter Property="OverridesDefaultStyle" Value="true"/>
    125. <Setter Property="Template">
    126. <Setter.Value>
    127. <ControlTemplate TargetType="{x:Type ComboBoxItem}">
    128. <Border Name="Border"
    129. Padding="2"
    130. SnapsToDevicePixels="true">
    131. <ContentPresenter />
    132. </Border>
    133. <ControlTemplate.Triggers>
    134. <Trigger Property="IsHighlighted" Value="true">
    135. <Setter TargetName="Border" Property="Background" Value="{DynamicResource VordergrundfarbeBrush}"/>
    136. <Setter Property="Foreground" Value="Black"/>
    137. </Trigger>
    138. <Trigger Property="IsEnabled" Value="false">
    139. <Setter Property="Foreground" Value="{DynamicResource VordergrundfarbeBrush}"/>
    140. </Trigger>
    141. </ControlTemplate.Triggers>
    142. </ControlTemplate>
    143. </Setter.Value>
    144. </Setter>
    145. </Style>

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kafffee“ ()