Lookless控件的ItemTemplatePanel无法看到控件上的依赖项属性

安东尼·罗素

因此,当我使用以下样式时,它会按预期应用于我的控件。但是,GridViewItemsPanelTemplateItemsTemplate内部的模板查看使用者为其数据上下文应用的视图模型。

问题是我想在控件中设置项目尺寸。

所以我的问题是,如何将控件模板作为数据上下文应用于ItemsPanelTemplateItemTemplate

我首先想到的是使用祖先绑定,但这似乎不是UWP的功能。

我的控制班

public class FilterableImageWrapGrid : FilterableContentList
    {
        private GridView _partGridView;

        public Point ItemDimensions
        {
            get { return (Point)GetValue(ItemDimensionsProperty); }
            set { SetValue(ItemDimensionsProperty, value); }
        }

        // Using a DependencyProperty as the backing store for ItemDimensions.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty ItemDimensionsProperty =
            DependencyProperty.Register("ItemDimensions", typeof(Point), typeof(FilterableImageWrapGrid), new PropertyMetadata(new Point()));

        public FilterableImageWrapGrid()
        {
            DefaultStyleKey = typeof(FilterableImageWrapGrid);
        }

        protected override void OnApplyTemplate()
        {
            _partGridView = GetTemplateChild("PART_FilterableImageList") as GridView;           

            base.OnApplyTemplate();
        }

        private static void OnItemDimensionsChanged(object sender, DependencyPropertyChangedEventArgs args)
        {
            FilterableImageWrapGrid wrapGrid = sender as FilterableImageWrapGrid;

            if (wrapGrid != null && wrapGrid._partGridView != null)
            {
                wrapGrid._partGridView.ItemTemplate.SetValue(GridViewItem.WidthProperty, wrapGrid.ItemDimensions.X);
                wrapGrid._partGridView.ItemTemplate.SetValue(GridViewItem.HeightProperty, wrapGrid.ItemDimensions.Y);
            }
        }
    }

我的Generic.xaml文件中的样式

 <Style TargetType="controls:FilterableImageWrapGrid">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>                   
                    <Grid VerticalAlignment="Stretch">                        
                        <GridView                                   
                            x:Name="PART_FilterableImageList"
                            ItemsSource="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=FilteredItems, Mode=TwoWay}"
                            SelectedItem="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=SelectedContentItem, Mode=TwoWay}">
                            <GridView.ItemContainerTransitions>
                                <TransitionCollection>
                                    <EntranceThemeTransition  IsStaggeringEnabled="True"/>
                                    <AddDeleteThemeTransition />
                                    <EdgeUIThemeTransition Edge="Left"/>
                                </TransitionCollection>
                            </GridView.ItemContainerTransitions>
                            <GridView.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <ItemsWrapGrid 
                                        x:Name="PART_ItemsWrapGrid"
                                        ItemHeight="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=ItemDimensions.Y}"
                                        ItemWidth="{Binding RelativeSource={RelativeSource Mode=TemplatedParent}, Path=ItemDimensions.X}"
                                        Margin="2" Orientation="Horizontal" 
                                        HorizontalAlignment="Center"/>
                                </ItemsPanelTemplate>
                            </GridView.ItemsPanel>
                            <GridView.ItemTemplate>
                                <DataTemplate>
                                   .... Data template that binds to the view model the consumer provides....
                                </DataTemplate>
                            </GridView.ItemTemplate>
                        </GridView>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
马库斯·赫特(MarkusHütter)

如果我对您的理解正确,那么RelativeSource Mode=TemplatedParent在模板内的模板中进行绑定是行不通的是吗

然后将该ItemDimensions属性定义为附加的Dependency属性:

public class FilterableImageWrapGrid : FilterableContentList

    public static Point GetItemDimensions(DependencyObject obj)
    {
        return (Point)obj.GetValue(ItemDimensionsProperty);
    }

    public static void SetItemDimensions(DependencyObject obj, Point value)
    {
        obj.SetValue(ItemDimensionsProperty, value);
    }

    public static readonly DependencyProperty ItemDimensionsProperty =
        DependencyProperty.RegisterAttached("ItemDimensions", typeof(Point), typeof(ItemsWrapGrid), new PropertyMetadata(new Point()));

    ...
}

然后将其添加到模板中:

                     <GridView                                   
                            x:Name="PART_FilterableImageList"
                            ...
                            <GridView.ItemsPanel>
                                <ItemsPanelTemplate>
                                    <ItemsWrapGrid 
                                        x:Name="PART_ItemsWrapGrid"                                        
                                        ItemHeight="{Binding RelativeSource=
                                 {RelativeSource Mode=Self}, Path=ItemDimensions.Y}"
                                        ItemWidth="{Binding RelativeSource=
                                 {RelativeSource Mode=Self}, Path=ItemDimensions.X}"
                                        Margin="2" Orientation="Horizontal" 
                                        HorizontalAlignment="Center"/>
                                </ItemsPanelTemplate>
                            </GridView.ItemsPanel>
                            ...
                        </GridView>

这就像一个可继承的属性(在uwp中不存在(尚未?)),您可以通过模板绑定将可视树手动向下推到内部模板。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取控件的所有依赖项属性

来自分类Dev

用户控件的依赖项属性-WPF

来自分类Dev

用户控件累积依赖项属性绑定

来自分类Dev

WPF用户控件依赖项属性绑定

来自分类Dev

获取控件的所有依赖项属性

来自分类Dev

WPF:用户控件的依赖项属性

来自分类Dev

我可以通过绑定到wpf父控件上的属性的依赖项属性在xaml中设置用户控件datacontext吗?

来自分类Dev

当绑定数据更改时,用户控件上的依赖项属性不会更新属性

来自分类Dev

自定义控件依赖项属性集合,计算嵌套的控件项

来自分类Dev

MVVM中具有依赖项属性的用户控件

来自分类Dev

WPF自定义控件,模型作为依赖项属性

来自分类Dev

WPF:具有依赖项属性和子控件的UserControl

来自分类Dev

WPF依赖项属性绑定到用户控件

来自分类Dev

控件模板中未为datagrid设置依赖项属性

来自分类Dev

绑定到用户控件依赖项属性不起作用

来自分类Dev

在用户控件中绑定ObservableCollection依赖项属性

来自分类Dev

绑定到子控件内部行为的依赖项属性

来自分类Dev

UWP用户控件:绑定依赖项属性的集合更改事件

来自分类Dev

WPF依赖项属性绑定到用户控件

来自分类Dev

无法调用控件的属性

来自分类Dev

自定义控件中的属性绑定到依赖项属性不起作用

来自分类Dev

为什么我在WPF用户控件上看到“无法识别或无法访问成员”错误?

来自分类Dev

遍历C#Winform控件时,无法在富文本框控件上使用Rtb属性

来自分类Dev

绑定到wpf自定义控件依赖项属性以获取工具提示吗?

来自分类Dev

如何正确绑定到MVVM框架中用户控件的依赖项属性

来自分类Dev

如何在WPF中的FormattedText的简单自定义控件中设置依赖项属性AddOwner

来自分类Dev

自定义控件中的依赖项属性意外共享内存/值

来自分类Dev

尝试绑定到同一用户控件的依赖项属性时出错

来自分类Dev

绑定到wpf自定义控件依赖项属性以获取工具提示吗?

Related 相关文章

  1. 1

    获取控件的所有依赖项属性

  2. 2

    用户控件的依赖项属性-WPF

  3. 3

    用户控件累积依赖项属性绑定

  4. 4

    WPF用户控件依赖项属性绑定

  5. 5

    获取控件的所有依赖项属性

  6. 6

    WPF:用户控件的依赖项属性

  7. 7

    我可以通过绑定到wpf父控件上的属性的依赖项属性在xaml中设置用户控件datacontext吗?

  8. 8

    当绑定数据更改时,用户控件上的依赖项属性不会更新属性

  9. 9

    自定义控件依赖项属性集合,计算嵌套的控件项

  10. 10

    MVVM中具有依赖项属性的用户控件

  11. 11

    WPF自定义控件,模型作为依赖项属性

  12. 12

    WPF:具有依赖项属性和子控件的UserControl

  13. 13

    WPF依赖项属性绑定到用户控件

  14. 14

    控件模板中未为datagrid设置依赖项属性

  15. 15

    绑定到用户控件依赖项属性不起作用

  16. 16

    在用户控件中绑定ObservableCollection依赖项属性

  17. 17

    绑定到子控件内部行为的依赖项属性

  18. 18

    UWP用户控件:绑定依赖项属性的集合更改事件

  19. 19

    WPF依赖项属性绑定到用户控件

  20. 20

    无法调用控件的属性

  21. 21

    自定义控件中的属性绑定到依赖项属性不起作用

  22. 22

    为什么我在WPF用户控件上看到“无法识别或无法访问成员”错误?

  23. 23

    遍历C#Winform控件时,无法在富文本框控件上使用Rtb属性

  24. 24

    绑定到wpf自定义控件依赖项属性以获取工具提示吗?

  25. 25

    如何正确绑定到MVVM框架中用户控件的依赖项属性

  26. 26

    如何在WPF中的FormattedText的简单自定义控件中设置依赖项属性AddOwner

  27. 27

    自定义控件中的依赖项属性意外共享内存/值

  28. 28

    尝试绑定到同一用户控件的依赖项属性时出错

  29. 29

    绑定到wpf自定义控件依赖项属性以获取工具提示吗?

热门标签

归档