aus XCeed CheckCombobox eine WatermarkCheckCombobox machen

  • WPF

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    aus XCeed CheckCombobox eine WatermarkCheckCombobox machen

    Hi,

    hier das Controltemplate von der XCeed CheckCombobox. Ich würde gern ein Watermark noch einfügen, dass angezeigt wird, wenn nicht ausgewählt ist und das verschwindet wenn etwas ausgewählt wurde.

    XML-Quellcode

    1. <ControlTemplate x:Key="CheckComboBoxControlTemplate2" TargetType="{x:Type xctk:CheckComboBox}">
    2. <Grid x:Name="MainGrid" SnapsToDevicePixels="True">
    3. <Popup x:Name="PART_Popup" AllowsTransparency="True" IsOpen="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Margin="1" PopupAnimation="{DynamicResource {x:Static SystemParameters.ComboBoxPopupAnimationKey}}" Placement="Bottom" StaysOpen="False">
    4. <Grid MinWidth="{Binding ActualWidth, ElementName=MainGrid}">
    5. <Border x:Name="DropDownBorder" CornerRadius="3" BorderBrush="{DynamicResource {x:Static SystemColors.WindowFrameBrushKey}}" BorderThickness="1" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}" MaxHeight="{Binding MaxDropDownHeight, RelativeSource={RelativeSource TemplatedParent}}">
    6. <ScrollViewer x:Name="DropDownScrollViewer">
    7. <Grid RenderOptions.ClearTypeHint="Enabled">
    8. <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0">
    9. <Rectangle x:Name="OpaqueRect" Fill="{Binding Background, ElementName=DropDownBorder}" Height="{Binding ActualHeight, ElementName=DropDownBorder}" Width="{Binding ActualWidth, ElementName=DropDownBorder}"/>
    10. </Canvas>
    11. <StackPanel>
    12. <xctk:SelectAllSelectorItem x:Name="PART_SelectAllSelectorItem" Content="{TemplateBinding SelectAllContent}">
    13. <xctk:SelectAllSelectorItem.Visibility>
    14. <Binding Path="IsSelectAllActive" RelativeSource="{RelativeSource TemplatedParent}">
    15. <Binding.Converter>
    16. <BooleanToVisibilityConverter/>
    17. </Binding.Converter>
    18. </Binding>
    19. </xctk:SelectAllSelectorItem.Visibility>
    20. </xctk:SelectAllSelectorItem>
    21. <ItemsPresenter x:Name="PART_ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Contained" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
    22. </StackPanel>
    23. </Grid>
    24. </ScrollViewer>
    25. </Border>
    26. </Grid>
    27. </Popup>
    28. <Border BorderBrush="{TemplateBinding BorderBrush}" CornerRadius="3" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}"/>
    29. <ToggleButton x:Name="PART_DropDownButton" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" Content="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Focusable="False" HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}">
    30. <ToggleButton.IsHitTestVisible>
    31. <Binding Path="IsDropDownOpen" RelativeSource="{RelativeSource TemplatedParent}">
    32. <Binding.Converter>
    33. <xctk:InverseBoolConverter/>
    34. </Binding.Converter>
    35. </Binding>
    36. </ToggleButton.IsHitTestVisible>
    37. <ToggleButton.Style>
    38. <Style TargetType="{x:Type ToggleButton}">
    39. <Setter Property="OverridesDefaultStyle" Value="True"/>
    40. <Setter Property="IsTabStop" Value="False"/>
    41. <Setter Property="Focusable" Value="False"/>
    42. <Setter Property="Padding" Value="2"/>
    43. <Setter Property="Template">
    44. <Setter.Value>
    45. <ControlTemplate TargetType="{x:Type ToggleButton}">
    46. <xctk:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" CornerRadius="0" RenderNormal="False" RenderMouseOver="{Binding IsMouseOver, ElementName=PART_DropDownButton}" RenderPressed="{Binding IsPressed, ElementName=PART_DropDownButton}" RenderEnabled="{TemplateBinding IsEnabled}" SnapsToDevicePixels="True">
    47. <Grid>
    48. <Grid.ColumnDefinitions>
    49. <ColumnDefinition Width="*"/>
    50. <ColumnDefinition MinWidth="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}" Width="0"/>
    51. </Grid.ColumnDefinitions>
    52. <TextBox x:Name="TextBox" BorderThickness="0" Background="Transparent" Cursor="Arrow" Foreground="{TemplateBinding Foreground}" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" HorizontalScrollBarVisibility="Hidden" IsReadOnly="True" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Text="{Binding Content, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" VerticalScrollBarVisibility="Hidden" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
    53. <Grid Grid.Column="1" HorizontalAlignment="Right" Width="{DynamicResource {x:Static SystemParameters.VerticalScrollBarWidthKey}}">
    54. <Path x:Name="Arrow" Data="M0,1C0,1 0,0 0,0 0,0 3,0 3,0 3,0 3,1 3,1 3,1 4,1 4,1 4,1 4,0 4,0 4,0 7,0 7,0 7,0 7,1 7,1 7,1 6,1 6,1 6,1 6,2 6,2 6,2 5,2 5,2 5,2 5,3 5,3 5,3 4,3 4,3 4,3 4,4 4,4 4,4 3,4 3,4 3,4 3,3 3,3 3,3 2,3 2,3 2,3 2,2 2,2 2,2 1,2 1,2 1,2 1,1 1,1 1,1 0,1 0,1z" Fill="Black" HorizontalAlignment="Center" Margin="3,0" VerticalAlignment="Center"/>
    55. </Grid>
    56. </Grid>
    57. </xctk:ButtonChrome>
    58. <ControlTemplate.Triggers>
    59. <Trigger Property="IsChecked" Value="True">
    60. <Setter Property="RenderPressed" TargetName="Chrome" Value="True"/>
    61. </Trigger>
    62. <Trigger Property="IsEnabled" Value="False">
    63. <Setter Property="Fill" TargetName="Arrow" Value="#FFAFAFAF"/>
    64. </Trigger>
    65. <DataTrigger Binding="{Binding IsEditable, RelativeSource={RelativeSource FindAncestor, AncestorLevel=1, AncestorType={x:Type xctk:CheckComboBox}}}" Value="True">
    66. <Setter Property="IsReadOnly" TargetName="TextBox" Value="False"/>
    67. <Setter Property="Focusable" TargetName="TextBox" Value="True"/>
    68. <Setter Property="Cursor" TargetName="TextBox" Value="{x:Null}"/>
    69. </DataTrigger>
    70. </ControlTemplate.Triggers>
    71. </ControlTemplate>
    72. </Setter.Value>
    73. </Setter>
    74. </Style>
    75. </ToggleButton.Style>
    76. </ToggleButton>
    77. </Grid>
    78. </ControlTemplate>


    Nun würde ich vllt gerne ein label noch einfügen

    XML-Quellcode

    1. <Label Content="Filter nach Bereich..." Padding="3,2.5,0,0" Foreground="Gray" />


    das verschwindet wenn etwas ausgewählt wurde, und wieder angezeigt wird, wenn nichts ausgewählt wurde.

    ich hab leider absolut gar keine idee wo ich anfangen soll.

    Vielen Dank für die Hilfe
    Hallo

    r0tzi schrieb:

    ich hab leider absolut gar keine idee wo ich anfangen soll.


    Erstmal würde ich damit Anfangen zu klären WIE du diese Funktionalität implementieren willst. Willst du es nur in einem Projekt schnell mal drinnen haben oder soll es ein wiederverwendbares Control sein welches du in mehreren Projekten verwenden kannst.

    Falls das erste zutrifft kannst du dir ja einfach ein UserControl erstellen und darin ein Dependency Property für den Watermark-Text erstellen.
    Ansonsten gibt es nocht die möglichkeit eines Attached Properties für den Watermark-Text. Im ControlTemplate der XCeed CheckedCombobox kannste dann einfach den Wert abfragen und dein Label befüllen.

    Ein eigenes Control zu erstellen (basierend auf das XCeed Control) ist dann etwas komplizierter aber natürlich auch die sauberste Lösung.

    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. ##