gpt4 book ai didi

.net - UWP中通过XAML触发设置ListView选中项

转载 作者:行者123 更新时间:2023-12-02 02:15:57 25 4
gpt4 key购买 nike

我有一个包含文本框的 ListView,并且我想每当用户在其中一个文本框内单击时设置所选项目。

这是我到目前为止所尝试过的。

<StackPanel Orientation="Vertical">

<TextBlock Text="Name Serial"/>
<ListView ItemsSource="{Binding Items, Mode=OneWay}"
SelectedItem="{x:Bind VM.SelectedItem, Mode=TwoWay}">
<ListView.Resources>
<Style TargetType="ListViewItem">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="IsSelected" Value="True"/>
</Trigger>
</Style.Triggers>
</Style>
</ListView.Resources>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding Name, Mode=TwoWay}"/>
<TextBox Text="{Binding Serial, Mode=TwoWay}"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>

问题是 UWP 不支持样式触发器。还有其他方法可以实现这一目标吗?

最佳答案

通常,触发器可以用行为替换。这是一个例子 -

首先,您需要安装此 nuget如果还没有的话请打包。

Install-Package Microsoft.Xaml.Behaviors.Uwp.Managed

然后,您需要将这些命名空间添加到您的 XAML 中。

xmlns:Interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:Core="using:Microsoft.Xaml.Interactions.Core"

有了这些命名空间,您现在可以使用之前安装的 nuget 软件包附带的 EventTriggerBehavior。您基本上需要将其附加到控制选择的所有 TextBoxes。

<TextBox>
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="GotFocus">
<local:SelectSelectorItemAction />
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</TextBox>

在这种情况下,EventTriggerBehavior 的作用是,每当调用 TextBoxGotFocus 事件时,都会生成一个 IAction 调用的 SelectSelectorItemAction 将被执行(通过 IAction.Execute)。此 SelectSelectorItemAction 是您唯一需要构建的内容。

public class SelectSelectorItemAction : DependencyObject, IAction
{
public object Execute(object sender, object parameter)
{
var textBox = (FrameworkElement)sender;
var selectorItem = textBox.GetParent<SelectorItem>();

selectorItem.IsSelected = true;
return true;
}
}

public static class Extensions
{
public static T GetParent<T>(this DependencyObject element) where T : DependencyObject
{
var parent = VisualTreeHelper.GetParent(element);

// C# 7 pattern matching feature. If you are not using C# 7, change it.
if (parent is T p)
{
return p;
}

return GetParent<T>(parent);
}
}

代码非常简单。它所做的只是搜索视觉树并找到SelectorItem,它是ListViewItem的基类。这样,您也可以为 GridView 重用相同的 SelectSelectorItemAction

关于.net - UWP中通过XAML触发设置ListView选中项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42924643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com