繁体   English   中英

在Generic.xaml的模板化控件中应用默认样式

[英]Applying default style in templated control from Generic.xaml

我已经在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>

目标是使ItemTemplate中的ItemTemplate设置为默认模板,并允许在控件的不同实现上对其进行更改。

这是在CustomGridView.cs文件中定义ItemTemplate属性的方式:

    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吗? 我有什么想念的吗?

如有必要,我将提供其他代码。

非常感谢你!

您必须包含以下代码:

[assembly: ThemeInfo(ResourceDictionaryLocation.SourceAssembly, ResourceDictionaryLocation.SourceAssembly)]

到您的AssemblyInfo.cs文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM