在Generic.xaml中

时间:2016-06-15 17:41:44

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

我在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集成为默认值,并允许在控件的不同实现上更改它。

这里是如何在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?我错过了什么吗?

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

非常感谢!

1 个答案:

答案 0 :(得分:-1)

您必须包含以下代码:

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

到AssemblyInfo.cs文件