单击ListBoxItem更改TextBox只读

时间:2015-07-24 20:56:54

标签: c# wpf mvvm listbox event-handling

TextBoxListBoxItem被禁用,因此我可以将其拖放到ListBox

一旦我双击它,我希望它是Enabled所以我可以编辑Text,当我完成后我希望它再次Disabled进行拖放操作

我在MouseDoubleClick上有ListBoxItem个事件,但它不会更改TextBox ReadOnly。任何人都可以告诉我如何实现这一目标。

此时TextBox返回null。似乎我无法以我正在尝试的方式访问它。

XAML

<ListBox Name="Locations"  Cursor="Hand" HorizontalAlignment="Left" Height="351" Margin="10,48,0,0" VerticalAlignment="Top" Width="285" ItemsSource="{Binding Locations}" dd:DragDrop.IsDragSource="True"
     dd:DragDrop.IsDropTarget="True" SelectedItem="{Binding SelectedItem}">

        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                <EventSetter Event="MouseDoubleClick" Handler="ListBoxItem_MouseDoubleClick"/>
            </Style>
        </ListBox.ItemContainerStyle>

        <ListBox.ItemTemplate>
                <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBox Name="textBox" Text="{Binding Path=Name}"  IsHitTestVisible="False" Width="270" Background="Transparent" BorderThickness="0" Margin="2"/>
                </StackPanel>
                </DataTemplate>
       </ListBox.ItemTemplate>
</ListBox>

在视图中

private void ListBoxItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
     ListBoxItem item = sender as ListBoxItem;
     textBox.IsReadOnly = false;
}

1 个答案:

答案 0 :(得分:0)

这是因为可视化树中的文本框“不存在”,WPF会在需要时为每个列表项创建一个,因此您永远不会引用它。可以导航可视化树并获取文本框参考,但我建议不要使用它,而是在项目模型中创建一个属性,类似“EditMode”,当您将其设置为true时,文本框将启用通过绑定IsEnabled属性。