我有两个数据表。一个是默认值,另一个是用户选择此项目时的默认值。我需要给所选项目提供正常模板的双倍宽度和高度。我怎么能这样做?
答案 0 :(得分:0)
您想要做的并不困难,但通过交换数据模板无法解决问题。相反,它是通过在XAML中使用Visual States来完成的。可视状态允许您创建多个视图"您的XAML(例如,选择时和未选中时的样子)以及在这些之间轻松切换。交换数据模板是一个大问题,Mostafa,并且可能导致您的UI闪烁,因为底层子系统必须重新渲染可视树的这么多部分。
如果您想了解有关视觉状态的更多信息,您可以阅读我在同一主题上撰写的博客文章。
http://blog.jerrynixon.com/2013/11/windows-81-how-to-use-visual-states-in.html
现在唯一的问题是弄清楚当选择gridview或listview中的项目时如何触发视觉状态。首先,您应该知道IsSelected是gridviewitem或listviewitem控件中包含项目的属性。但是,到达该属性很棘手,最常见的方法是对gridview / listview进行子类化,并覆盖PrepareContainerForItemOverride并在代码隐藏中设置绑定。
像这样:
class MyModel
{
public bool IsSelected { get; set; }
}
class MyList : Windows.UI.Xaml.Controls.ListView
{
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
var model = item as MyModel;
var listViewItem = element as Windows.UI.Xaml.Controls.ListViewItem;
var binding = new Windows.UI.Xaml.Data.Binding
{
Source = model,
Mode = Windows.UI.Xaml.Data.BindingMode.TwoWay,
Path = new PropertyPath(nameof(model.IsSelected)),
};
listViewItem.SetBinding(Windows.UI.Xaml.Controls.ListViewItem.IsSelectedProperty, binding);
base.PrepareContainerForItemOverride(element, item);
}
}
我希望这会有所帮助。
祝你好运!