Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在单击ItemTemplate中的按钮/文本框时更改listbox的选定项?_C#_Wpf_Xaml_Listbox - Fatal编程技术网

C# 如何在单击ItemTemplate中的按钮/文本框时更改listbox的选定项?

C# 如何在单击ItemTemplate中的按钮/文本框时更改listbox的选定项?,c#,wpf,xaml,listbox,C#,Wpf,Xaml,Listbox,在WPF项目中,我有一个ListBox,它的itemsource绑定到一组项。我在列表框的ItemTemplate中使用DataTemplate来表示这些项的UI 我想做的是,当用户点击绑定项的DataTemplate的任何部分时,列表框。SelectedItem被设置为其DataTemplate所在的项。然后将应用所选的样式。正如您可以从下面的示例代码中看到的,单击标签就可以了。但是,诸如按钮和文本框等控件的行为并不符合要求,毫无疑问还有其他控件。我怀疑这和专注有关 我怎样才能做到这一点 XA

在WPF项目中,我有一个
ListBox
,它的
itemsource
绑定到一组项。我在
列表框的
ItemTemplate
中使用
DataTemplate
来表示这些项的UI

我想做的是,当用户点击绑定项的DataTemplate的任何部分时,
列表框。SelectedItem
被设置为其
DataTemplate
所在的项。然后将应用所选的
样式。正如您可以从下面的示例代码中看到的,单击标签就可以了。但是,诸如
按钮
文本框
等控件的行为并不符合要求,毫无疑问还有其他控件。我怀疑这和专注有关

我怎样才能做到这一点

XAML:


您可以为模板中的
Border
元素处理
PreviewMouseLeftButtonDown
事件,并显式选择相应的项:

private void Border_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Border border = sender as Border;
    lvv.SelectedItem = border.DataContext;
}


Hi@mm8,感谢您的回复。很好!干杯想知道是否有一个XAML唯一的解决方案来避免代码落后?
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        // Dummy items to generate 4 items in ListBox
        DataContext = new object[] { 1, 2, 3, 4 };
    }
}
private void Border_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Border border = sender as Border;
    lvv.SelectedItem = border.DataContext;
}
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="ListBoxItem">
            <Border Name="Border" Padding="2" SnapsToDevicePixels="true"
PreviewMouseLeftButtonDown="Border_PreviewMouseLeftButtonDown">
                <ContentPresenter />
            </Border>
            <ControlTemplate.Triggers>
                <Trigger Property="IsSelected" Value="true">
                    <Setter TargetName="Border" Property="BorderBrush" Value="Blue"/>
                    <Setter TargetName="Border" Property="BorderThickness" Value="1"/>
                    <Setter Property="FontWeight" Value="Bold" />
                    <Setter Property="Foreground" Value="Black" />
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>