我想知道是否可以将像BorderThickness.Top这样的结构元素绑定到TemplatedParent的相应属性.我试过了
<Border Margin="0" Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}">
<Border.BorderThickness>
<Thickness Left="0" Right="0" Top="{TemplateBinding BorderThickness.Top}" Bottom="{TemplateBinding BorderThickness.Bottom}"/>
</Border.BorderThickness>
</Border>
Run Code Online (Sandbox Code Playgroud)
我想要这样做的原因是我希望左和右为0并且只有顶部和底部被绑定.
提前致谢.
我是wpf和xaml的新手.我通过在这里搜索或搜索谷歌来找到大多数问题(在其他语言中)的解决方案,但这一个让我发疯.我在谷歌搜索了很多并浏览了很多论坛,但似乎这次我遇到了一个真正的挑战!
我在Window.Resources中有以下代码:
<my:NameConverter x:Key="NameConverter"/>
<MultiBinding x:Key="CustomerFullNameBinding"
Converter="{StaticResource NameConverter}"
ConverterParameter="LastNameFirst">
<Binding Path="FirstName" />
<Binding Path="MiddleName" />
<Binding Path="LastName" />
</MultiBinding>
Run Code Online (Sandbox Code Playgroud)
该NameConverter类组合名称的各个部分返回全名.返回值基于ConverterParameter的值,该值可以是以下之一:FirstNameFirst,LastNameFirst,OnlyFirstName,OnlyLastName,Initials(还有一些;但为简单起见,我们不考虑它们)
这段代码工作正常.我用以下来得到结果:
<TextBlock Text="{DynamicResource CustomerFullNameBinding}"/>
Run Code Online (Sandbox Code Playgroud)
但是,问题是如果我在我的代码中使用资源CustomerFullNameBinding 20次(如所示abovw),所有这些都将以一种特定格式显示名称.(即在CustomerFullNameBinding的声明中,我设置了ConverterParameter ="LastNameFirst",所以所有20个引用都只会以这种方式显示名称.)
现在我的问题是我可以使它更"通用",以便我可以动态设置ConverterParameter的值吗?即我可以有多个文本块,可以显示不同格式的全名.我知道如果我们创建多个资源是可能的,如下所示:
<MultiBinding x:Key="CustomerFullNameBinding_FirstNameFirst"
Converter="..." ConverterParameter="FirstNameFirst">
......
</MultiBinding>
<MultiBinding x:Key="CustomerFullNameBinding_LastNameFirst"
Converter="..." ConverterParameter="LastNameFirst">
......
</MultiBinding>
<MultiBinding x:Key="CustomerFullNameBinding_OnlyFirstName"
Converter="..." ConverterParameter="OnlyFirstName">
......
</MultiBinding>
... and so on ...
Run Code Online (Sandbox Code Playgroud)
但我不想这样,'因为它真的会让我的代码太笨重,最重要的是它会使资源的可重用性概念无效!
请建议我任何可能的解决方案.
提前致谢.
注意:我从这里得到了最初的想法.类似的工作示例可以在msdn.microsoft.com/en-us/library/ms771336.aspx找到.
标签:wpf xaml staticresource dynamicresource binding
设想:
我想用3个标准字体大小为我的WPF应用程序:BigFontSize,NormalFontSize,和SmallFontSize。这些是双值,它们在资源字典中定义为(sys适当定义的地方):
<sys:Double x:Key="BigFontSize">18</sys:Double>
<sys:Double x:Key="NormalFontSize">14</sys:Double>
<sys:Double x:Key="SmallFontSize">12</sys:Double>
Run Code Online (Sandbox Code Playgroud)
这很好用。但是我随机选择了 14 个作为正常尺寸。我想要的是获得系统定义的字体大小NormalFontSize。(如果这样做了,我可以使用此处描述的转换器来获取BigFontSize和SmallFontSize相对于NormalFontSize)
线索:
我从文档中发现默认字体大小存储在静态属性 (double) 中SystemFonts.MessageFontSize。但是我应该怎么做才能将该值检索到资源字典中?(我知道Binding或DynamicResource不能适用。但是,嘿,这是一个静态值,所以我怎么能申请StaticResource或x:Static或什么?)
我试过了
<sys:Double x:Key="XXXFontSize">
<StaticResource ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>
Run Code Online (Sandbox Code Playgroud)
和
<sys:Double x:Key="XXXFontSize">
<x:Static ResourceKey="SystemFonts.MessageFontSize" />
</sys:Double>
Run Code Online (Sandbox Code Playgroud)
两者似乎都不起作用(如预期)。我收到一条错误消息Cannot add content to object of type 'System.Double'.
笔记:
我不想将其封装在可以从中派生出其他样式的通用样式中(使用BasedOn),因为我有多个资源字典,并且无法使用DynamicResourcewithBasedOn
也就是说,我不能使用 …