none
Text in editierbarer ComboBox per Trigger löschen RRS feed

  • Frage

  • Hallo Zusammen,

    Ich habe im Style einer editierbaren Combobox einen zusätzlichen Button eingebaut. Beim Klick auf diesen Button möchte ich den Inhalt, der links neben den Button angezeigt wird, löschen.  Dazu habe ich folgenden Code.

    <Trigger SourceName="btnDelText" Property="Button.IsPressed" Value="True">
        <Setter TargetName="PART_EditableTextBox" Property="Text" Value=""/>
        <Setter Property="SelectedIndex" Value="-1"/>
    </Trigger>

    Wurde ein Item ausgewählt, funktioniert es. Also:
    - Der neue Butonn spricht den Trigger an
    - SelectesdIndex = -1 funktioniert

    Aber:
    <Setter TargetName="PART_EditableTextBox" Property="Text" Value=""/>
    funktioniert nicht.

    Der ganze Code sieht wie folgt aus

    <Style TargetType="{x:Type ComboBox}" x:Key="{x:Type ComboBox}">
                <Setter Property="IsEditable" Value="True"/>
                <Setter Property="SnapsToDevicePixels" Value="True"/>
                <Setter Property="StaysOpenOnEdit" Value="True"/>
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ComboBox}">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition/>
                                    <ColumnDefinition Width="20"/>
                                    <ColumnDefinition Width="20"/>
                                </Grid.ColumnDefinitions>
                                <VisualStateManager.VisualStateGroups>
                                    <VisualStateGroup x:Name="EditStates">
                                        <VisualState x:Name="Editable">
                                            <Storyboard>
                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="PART_EditableTextBox">
                                                    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}" />
                                                </ObjectAnimationUsingKeyFrames>
                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="ContentSite">
                                                    <DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}" />
                                                </ObjectAnimationUsingKeyFrames>
                                            </Storyboard>
                                        </VisualState>
                                        <VisualState x:Name="Uneditable" />
                                    </VisualStateGroup>
                                </VisualStateManager.VisualStateGroups>
                                <ContentPresenter Grid.Column="0"
                                                  x:Name="ContentSite" 
                                                  IsHitTestVisible="False"
                                                  Content="{TemplateBinding SelectionBoxItem}" 
                                                  ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" />
                                <TextBox Grid.Column="0" x:Name="PART_EditableTextBox" />           
                                <ToggleButton Grid.Column="1"
                                              Focusable="false" 
                                              ClickMode="Press" 
                                              IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}"/>
                                <Button Grid.Column="2" x:Name="btnDelText" Content="D" />
                                <Popup x:Name="Popup"
                                       Placement="Bottom"
                                       IsOpen="{TemplateBinding IsDropDownOpen}" 
                                       AllowsTransparency="False"
                                       Focusable="False" 
                                       PopupAnimation="Slide">                               
                                    <Grid x:Name="DropDownGrid"
                                          MinWidth="{TemplateBinding ActualWidth}"
                                          MaxHeight="{TemplateBinding MaxDropDownHeight}">
                                        <Border x:Name="DropDownBorder"
                                                Background="White"
                                                BorderThickness="1" 
                                                BorderBrush="Black"/>
                                        <ScrollViewer Margin="4,6,4,6" SnapsToDevicePixels="True">
                                            <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" />
                                        </ScrollViewer>
                                    </Grid>
                                </Popup>
                            </Grid>
                            <ControlTemplate.Triggers>
                                <Trigger SourceName="btnDelText" Property="Button.IsPressed" Value="True">
                                    <Setter Property="SelectedIndex" Value="-1"/>
                                    <Setter TargetName="PART_EditableTextBox" Property="Text" Value=" "/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

    Über Hilfe würde ich mich sehr freuen

    Grüße

    Jürgen

    Freitag, 9. August 2013 12:00

Antworten

  • Hallo Jürgen Z,

    gucke dir mal das hier an. Nachdem ich deinen Code entsprechend abgeändert habe, hat es funktioniert.

                                <Trigger SourceName="btnDelText" Property="Button.IsPressed" Value="True">
                                    <Setter Property="SelectedIndex" Value="-1"/>
                                    <Setter TargetName="PART_EditableTextBox" Property="Text" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag}"/>
                                    <Setter Property="Text" Value="{x:Null}" />
                                </Trigger>

    Solange du die Text-Eigenschaft der ComboBox nicht festlegst, gehen auch Datenbindungen Problemlos.

            <ComboBox Name="cb" HorizontalAlignment="Left" Margin="86,71,0,0" VerticalAlignment="Top" Width="120">
                <ComboBoxItem Content="Item 1"/>
                <ComboBoxItem Content="Item 2"/>
                <ComboBoxItem Content="Item 3"/>
                <ComboBoxItem Content="Item 4"/>
            </ComboBox>
            <TextBox HorizontalAlignment="Left" Height="23" Margin="86,144,0,0" TextWrapping="Wrap" Text="{Binding Text, ElementName=cb}" VerticalAlignment="Top" Width="120"/>





    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Freitag, 9. August 2013 14:30
    Moderator

Alle Antworten

  • Hallo Jürgen Z,

    gucke dir mal das hier an. Nachdem ich deinen Code entsprechend abgeändert habe, hat es funktioniert.

                                <Trigger SourceName="btnDelText" Property="Button.IsPressed" Value="True">
                                    <Setter Property="SelectedIndex" Value="-1"/>
                                    <Setter TargetName="PART_EditableTextBox" Property="Text" Value="{Binding RelativeSource={RelativeSource Self}, Path=Tag}"/>
                                    <Setter Property="Text" Value="{x:Null}" />
                                </Trigger>

    Solange du die Text-Eigenschaft der ComboBox nicht festlegst, gehen auch Datenbindungen Problemlos.

            <ComboBox Name="cb" HorizontalAlignment="Left" Margin="86,71,0,0" VerticalAlignment="Top" Width="120">
                <ComboBoxItem Content="Item 1"/>
                <ComboBoxItem Content="Item 2"/>
                <ComboBoxItem Content="Item 3"/>
                <ComboBoxItem Content="Item 4"/>
            </ComboBox>
            <TextBox HorizontalAlignment="Left" Height="23" Margin="86,144,0,0" TextWrapping="Wrap" Text="{Binding Text, ElementName=cb}" VerticalAlignment="Top" Width="120"/>





    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Freitag, 9. August 2013 14:30
    Moderator
  • Hallo Koopakiller,

    vielen dank, es funzt super

    Jürgen

    Freitag, 9. August 2013 20:49