在MouseDoubleClick之后在ListBoxItem中启用TextBox

时间:2015-07-24 07:58:01

标签: c# wpf mvvm textbox listbox

我在ListBoxItem中有一个TextBox,它被禁用,所以我可以将它拖放到ListBox中。

现在,当我双击它时,我希望它被启用,这样我就可以编辑文本了,当我完成后我希望它再次被禁用以进行拖放。

我在ListBoxItem上有MouseDoubleClick事件,但我无法访问TextBox。任何人都可以告诉我如何实现这一目标。

目前在代码隐藏中无法识别textBox。似乎我无法按照我尝试的方式访问它。

XAML

fetch()

在视图中

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

        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
                <EventSetter Event="MouseDoubleClick" Handler="ListBoxItem_MouseDoubleClick"/>
                <EventSetter Event="LostFocus" Handler="ListBoxItem_LostFocus"/>
            </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>

1 个答案:

答案 0 :(得分:0)

您可以使用ReadOnly属性,这将阻止用户对文本进行任何更改:

texBox.ReadOnly = true;

private void changeText(object sender, EventArgs e)
{
    (sender as TextBox).ReadOnly = false;
}