gpt4 book ai didi

wpf - 将附加的依赖属性值传播到模板

转载 作者:行者123 更新时间:2023-12-04 04:53:04 24 4
gpt4 key购买 nike

附加的依赖属性值可以传播到模板化的子级吗?

示例:尝试将 TagCloudService.* 属性传播到 ItemTemplate

<ItemsControl x:Name="myItemsControl"
pages:TagCloudService.MaximumFontSize="20"
pages:TagCloudService.MaximumFontWeight="800"
pages:TagCloudService.MinimumFontSize="10"
pages:TagCloudService.MinimumFontWeight="400"
pages:TagCloudService.NumberOfSizes="5"
pages:TagCloudService.TagFrequency="{Binding Hotttnesss}"
pages:TagCloudService.TagWeight="{Binding Weight}"
Template="{StaticResource TagCloudItemsControlTemplate}">
<ItemsControl.ItemTemplate>
<StaticResource ResourceKey="TermTagCloudTemplate" />
</ItemsControl.ItemTemplate>
</ItemsControl>

这是已定义一些默认值但应覆盖的项目模板:
<DataTemplate x:Key="TermTagCloudTemplate" DataType="api:Term">
<TextBlock Foreground="DodgerBlue"
Padding="10"
Style="{StaticResource TagCloudTextBlockStyle}"
Text="{Binding Name}"
pages:TagCloudService.MaximumFontSize="30"
pages:TagCloudService.MaximumFontWeight="800"
pages:TagCloudService.MinimumFontSize="20"
pages:TagCloudService.MinimumFontWeight="400"
pages:TagCloudService.NumberOfSizes="5"
pages:TagCloudService.TagFrequency="{Binding Frequency}"
pages:TagCloudService.TagWeight="{Binding Weight}">
</TextBlock>
</DataTemplate>

我尝试设置 FrameworkPropertyMetadataOptions.OverridesInheritanceBehavior 而不是 .Inherits,尝试在模板中注释默认值,但不会传播属性。

这是可能的还是我应该为该控件创建另一个 ItemTemplate ?

最佳答案

其实很简单。

使用 Inherits 声明附加属性-选项:

public static string GetFoo(DependencyObject obj)
{
return (string)obj.GetValue(FooProperty);
}

public static void SetFoo(DependencyObject obj, string value)
{
obj.SetValue(FooProperty, value);
}

public static readonly DependencyProperty FooProperty =
DependencyProperty.RegisterAttached(
"Foo", typeof(string), typeof(MainWindow),
new FrameworkPropertyMetadata(
"default",
// this bit is important:
FrameworkPropertyMetadataOptions.Inherits));

测试 XAML:
<Grid src:MainWindow.Foo="non-default">
<TextBlock Text="{Binding (src:MainWindow.Foo),
RelativeSource={RelativeSource Self}}"/>
</Grid>

显示“非默认”。

这也适用于模板边界,完整示例如下。
<Window x:Class="DPInheritance.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:src="clr-namespace:DPInheritance"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<DataTemplate x:Key="Test">
<TextBlock Text="{Binding (src:MainWindow.Foo),
RelativeSource={RelativeSource Self}}"/>
</DataTemplate>
</Window.Resources>
<Grid src:MainWindow.Foo="non-default">
<ItemsControl ItemTemplate="{StaticResource Test}">
<sys:Int32>0</sys:Int32>
<sys:Int32>1</sys:Int32>
<sys:Int32>2</sys:Int32>
</ItemsControl>
</Grid>
</Window>

关于wpf - 将附加的依赖属性值传播到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17137238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com