我需要在整个应用程序中使用相同的视觉样式设置几个GridView
样式。此样式包括自定义ItemsPanel
属性以及GroupStyle
属性。
我的问题是GroupStyle
的{{1}}属性不是依赖属性。所以我想写的代码(见下文)不起作用。
您是否知道在几个GridView
之间分享样式(包括GroupStyle
)的简洁方法?
我唯一能想到的是使用GridView
,但它有点愚蠢,因为没有选择:它总是与正在使用的GroupStyleSelector
相同。此外,我怀疑它不会在VS&amp ;;的设计时反映出来。共混物。
我想用的代码:
GroupStyle
答案 0 :(得分:2)
我有一个神奇的快乐解决方案。
您可以创建在Style中设置的自定义附加属性,并在设置内部时在GridView上设置GroupStyle属性。
附属物:
// Workaround for lack of generics in XAML
public class GroupStyleCollection : Collection<GroupStyle>
{
}
public class GroupStyleHelper
{
public static ICollection<GroupStyle> GetGroupStyle(ItemsControl obj)
{
return (ICollection<GroupStyle>)obj.GetValue(GroupStyleProperty);
}
public static void SetGroupStyle(ItemsControl obj, ICollection<GroupStyle> value)
{
obj.SetValue(GroupStyleProperty, value);
}
public static readonly DependencyProperty GroupStyleProperty =
DependencyProperty.RegisterAttached(
"GroupStyle",
typeof(ICollection<GroupStyle>),
typeof(GroupStyleHelper),
new PropertyMetadata(null, OnGroupStyleChanged));
private static void OnGroupStyleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
ItemsControl itemsControl = d as ItemsControl;
if (itemsControl == null)
return;
RefreshGroupStyle(itemsControl, GetGroupStyle(itemsControl));
}
private static void RefreshGroupStyle(ItemsControl itemsControl, IEnumerable<GroupStyle> groupStyle)
{
itemsControl.GroupStyle.Clear();
if (groupStyle == null)
return;
foreach (var item in groupStyle)
{
itemsControl.GroupStyle.Add(item);
}
}
}
XAML风格:
<Style TargetType="ItemsControl">
<Setter Property="GroupStyleTest:GroupStyleHelper.GroupStyle">
<Setter.Value>
<GroupStyleTest:GroupStyleCollection>
<GroupStyle>
<GroupStyle.HeaderTemplate>
<DataTemplate>
<TextBlock FontWeight="Bold" FontSize="15" Text="{Binding Path=Name}" Foreground="HotPink"/>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
</GroupStyleTest:GroupStyleCollection>
</Setter.Value>
</Setter>
</Style>
免责声明:我在WPF而不是WinRT中进行测试,但就我所知,它应该可以正常工作。这也是我使用ItemsControl而不是GridView的原因,但无论如何属性都是ItemsControl.GroupStyle。
答案 1 :(得分:1)
我有一个解决方案,肯定会按照你的问题工作,但你应该决定是否在你的情况下使用它。
如果您必须在整个项目中制作相同的控件样式,那么您应该在该文件夹中创建一个公共文件夹 创建一个“自定义用户控件”并应用您的所有样式和 根据需要定制它。
之后,当您需要在同一控件(任何网格控件)上应用相同类型的样式时,只需添加该自定义用户即 控制而不是预定义的控制
通过这样做,您还将实现MVC架构和模块化。
我正在使用XAML在C#中开发Windows 8 Metro应用程序,并且每当我想要这种方法时,我总是使用这个解决方案并且它始终有效......
要创建自定义用户控件,您应该使用 visual studio &amp;在右键单击项目 - &gt;添加 - &gt;新项目 - &gt;用户控制
(对不起,如果你在这里找不到你的解决方案,但我认为这可能会有所帮助......)