如何将功能按钮添加到 UWP XAML 中的列表框项
Posted
技术标签:
【中文标题】如何将功能按钮添加到 UWP XAML 中的列表框项【英文标题】:How do I add a functioning button to a listboxitem in UWP XAML 【发布时间】:2017-06-16 12:32:19 【问题描述】:我有一个带有 ListBox 的 UWP C# 应用程序。我将 ListBox ItemContainerStyle 属性设置为资源中的样式。我试图在样式中向 ControlTemplate 添加一个按钮。我不知道在哪里添加 Clicked 或 tapped 事件处理程序。
我将代码转换为使用直接添加到列表中的 UserControl,它工作得很好,只是 VisualStateManager 在 UserControl 中不起作用。
所以我可以获得一个带有 UserControl 代码隐藏的功能按钮,我可以让 VisualStateManager 工作并处理我的 ListBoxItem 选择的自定义可视化,但我无法获得视觉状态以及功能按钮。
我不确定这里要显示什么代码,因为就像我说的那样,除了按钮之外的所有内容都可以与样式一起正常工作,并且除了视觉状态处理之外,所有内容都可以与用户控件一起正常工作。
我已经阅读了我能找到的所有关于这个的问题,我能找到的最接近的方法是为按钮提供一个处理函数,但没有人说要将它添加到哪个类;他们只是在任何情况下单独显示功能。视觉状态处理似乎总是需要开发人员检测鼠标悬停、选择等...,在代码中处理状态,每个状态都有一个处理程序来检测,然后调用 GoToState 来让视觉状态管理器去做它的东西。必须有一种方法可以做到这一点,而无需所有这些旋转和额外且看似冗余的代码。
[更新]
我目前正在通过设置 ItemContainerStyle 为 ListBoxItem 使用样式。此外,我正在尝试绑定新添加的 Button 的 Command 参数。它不起作用。这是该样式的 XAML,只显示了重要部分(因为除了按钮之外,它都按预期工作)。这显示了两个文本框和按钮。重要的是要注意 TextBox 元素的 Text 属性的绑定工作正常,并且文本完全按预期显示。这让我想假设绑定源和路径的东西都设置正确。但是再一次,我被挫败了,因为 Command 绑定不起作用,并且在构建或运行时没有报告错误:
<StackPanel Background="Transparent" Margin="0,0,0,0">
<TextBlock FontSize="22" TextWrapping="Wrap" FontWeight="SemiLight" x:Name="Title" Text="Binding Title" Margin="12,4,24,6" Visibility="Binding Title, Converter=StaticResource StringToVisibiltyConverter" Foreground="Binding color"/>
<TextBlock TextWrapping="Wrap" Visibility="Binding SubTitle, Converter=StaticResource StringToVisibiltyConverter" x:Name="Subtitle" Text="Binding SubTitle" Margin="12,-6,24,6" Opacity="0.8" Foreground="Binding color"/>
<Button Command="Binding ClickCommand" CommandParameter="x">X</Button>
</StackPanel>
这是我添加到 ListBox 的对象的代码:
public class MultilineListboxItem : Object
public MultilineListboxItem() ClickCommand = new _ClickCommand();
public string Title get; set;
public string SubTitle get; set;
public string Original get; set;
public override string ToString() return Original;
public SolidColorBrush color get; set;
_ClickCommand ClickCommand;
当然还有 _ClickCommand 类定义:
public class _ClickCommand : ICommand
public void Execute(object parameter)
Diagnostics.AppendDiagnostic( "derf" );
public bool CanExecute(object parameter)
Diagnostics.AppendDiagnostic( "derf" );
return true;
public event EventHandler CanExecuteChanged;
这些是我自己的诊断报告函数,不是 C# 或 WinRT 中的。
现在我又回到了使用样式来定义列表项的外观,视觉状态都按预期工作。
【问题讨论】:
【参考方案1】:尝试将ClickCommand
更改为公共属性。
用作绑定的绑定源属性的属性必须是类的公共属性。明确定义的接口 不能出于绑定目的访问属性,也不能受保护, 没有基础的私有、内部或虚拟属性 实施。 您不能绑定到公共字段。
参考:
https://***.com/a/19704292/3869284 https://msdn.microsoft.com/en-us/library/ms743643.aspx?f=255&MSPPError=-2147217396【讨论】:
只想指出,如果您使用x:Bind
,private
也可以。以上是关于如何将功能按钮添加到 UWP XAML 中的列表框项的主要内容,如果未能解决你的问题,请参考以下文章