如何在listboxitem的click事件上更改listboxitem(此处为textbox)的属性(此处为按钮)

时间:2014-06-06 16:41:32

标签: wpf textbox listbox buttonclick

我有动态列表框包含文本框作为与observable集合绑定的列表框项。默认情况下,此文本框处于只读模式,我想在编辑按钮单击该列表框项目时使其可编辑。仅当鼠标悬停在列表框项目上时,编辑按钮才可见。如何在编辑按钮单击时使文本框可编辑。?

以下是我的尝试:

   <ListBox  Name="ListUrl" ItemsSource="{Binding .,Source=CollectionUrl,BindsDirectlyToSource=True}">
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="IsSelected" Value="True"/>
                        <Setter Property="Background" Value="Gray"/>
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ListBox.ItemContainerStyle>
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="100" />
                        <ColumnDefinition Width="30" />
                        <ColumnDefinition Width="30"/>
                    </Grid.ColumnDefinitions>
                    <RadioButton>
                        <TextBox Name="TextBoxUrl" Text="{Binding Path=urlString, Mode=TwoWay}" Foreground="Gray",IsReadOnly= True>
                            <TextBox.Style>
                                <Style TargetType="TextBox">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding ElementName=EditButton , Path=IsPressed}" Value="True">
                                            <Setter Property="IsReadOnly" Value="False"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBox.Style>
                        </TextBox>
                    </RadioButton>

                    <Button Name="EditButton" Content="Edit" Grid.Column="1" Click="Button_Click">
                        <Button.Style>
                            <Style TargetType="Button">
                                <Setter Property="Visibility" Value="Collapsed" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}, AncestorLevel=1}, Path=IsSelected}" Value="True">
                                        <Setter Property="Visibility" Value="Visible" />
                                        <Setter Property="ClickMode" Value="Press"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Button.Style>
                    </Button>
                    <Button Content="Delete" Grid.Column="2" Click="Button_Click_1" HorizontalAlignment="Right" Margin="0">
                        <Button.Style>
                            <Style TargetType="Button">
                                <Setter Property="Visibility" Value="Collapsed" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}, AncestorLevel=1}, Path=IsSelected}" Value="True">
                                        <Setter Property="Visibility" Value="Visible" />
                                        <Setter Property="ClickMode" Value="Press"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Button.Style>
                    </Button>              
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>  

1 个答案:

答案 0 :(得分:0)

而不是Button,用户ToggleButton并在包含bool IsEditing属性的类中创建一个属性urlString

然后,您可以将IsEditing绑定到ToggleButton.IsCheckedTextBox.IsReadOnly,如

<ToggleButton IsChecked="{Binding IsEditing}"/>

<TextBox Name="TextBoxUrl" IsReadOnly="{Binding IsEditing}"/>

不必说你的班级应该实施INotifyPropertyChanged并提升IsEditing的属性变化