在 Generic.xaml 的模板化控件中应用默认样式
Posted
技术标签:
【中文标题】在 Generic.xaml 的模板化控件中应用默认样式【英文标题】:Applying default style in templated control from Generic.xaml 【发布时间】:2016-10-16 23:16:31 【问题描述】:我在 WinRT/UWP 中创建了一个模板化控件,其中包含一个 GridView。我创建了一个 ItemTemplate
依赖属性,它将容纳网格视图项目的DataTemplate
,这样当控件在其他页面上重新使用时,我可以灵活地更改项目模板在每个实现中。
但是,使用我拥有的当前代码,它可以正确加载控件但未实现样式。
这是我的 Generic.xaml 代码:
<Style TargetType="ctrl:CustomGridView">
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<Grid Background="Red">
<TextBlock Text="Binding Name, Mode=OneWay" Foreground="White" TextAlignment="Center"/>
</Grid>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ctrl:CustomGridView">
<Grid>
<ContentPresenter x:Name="templateProxy" Width="TemplateBinding ItemWidth" Height="TemplateBinding ItemHeight" ContentTemplate="TemplateBinding ItemTemplate" Visibility="Collapsed" />
<GridView x:Name="gridView" ItemsSource="TemplateBinding ItemsSource"
SelectionMode="None" IsItemClickEnabled="True" IsSwipeEnabled="False" IsTabStop="False">
<GridView.ItemTemplate>
<DataTemplate>
<ContentPresenter Width="Binding Width, ElementName=templateProxy" Height="Binding Height, ElementName=templateProxy" ContentTemplate="TemplateBinding ItemTemplate" />
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
目标是使 Generic.xaml 中的ItemTemplate
设置为默认设置,并允许在控件的不同实现上更改它。
下面是 ItemTemplate
属性在 CustomGridView.cs 文件中的定义方式:
public static readonly DependencyProperty ItemTemplateProperty =
DependencyProperty.Register("ItemTemplate", typeof(DataTemplate), typeof(PatientGridView), new PropertyMetadata(null));
public DataTemplate ItemTemplate
get return (DataTemplate)GetValue(ItemTemplateProperty);
set SetValue(ItemTemplateProperty, value);
我应该在 CustomGridView.cs 中做些什么来加载默认的 ItemTemplate?我错过了什么吗?
如有必要,我会提供额外的代码。
非常感谢!
【问题讨论】:
【参考方案1】:您必须包含此代码:
[assembly: ThemeInfo(ResourceDictionaryLocation.SourceAssembly, ResourceDictionaryLocation.SourceAssembly)]
到您的 AssemblyInfo.cs 文件
【讨论】:
ThemeInfo 未显示在 IntelliSense 中。请注意,这是一个 UWP (Windows 10) 应用程序。以上是关于在 Generic.xaml 的模板化控件中应用默认样式的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在ControlTemplate中包含Xaml资源?