【问题标题】:Applying default style in templated control from Generic.xaml在 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?我错过了什么吗?

如有必要,我会提供额外的代码。

非常感谢!

【问题讨论】:

    标签: c# xaml windows-runtime windows-10 uwp


    【解决方案1】:

    您必须包含此代码:

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

    到您的 AssemblyInfo.cs 文件

    【讨论】:

    • ThemeInfo 未显示在 IntelliSense 中。请注意,这是一个 UWP (Windows 10) 应用程序。
    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 2012-06-24
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多