【发布时间】:2015-09-03 19:39:30
【问题描述】:
我正在使用最新的 MahApps WPF 工具包,但在将自己的样式应用到其控件(即 PasswordBox)时遇到了一些麻烦。
我在 App.xaml 文件中包含的单独 .xaml 文件中定义了样式,以便它在所有 .xaml 文件中全局可见。
但是当我使用键下指定的样式时,MahApps ClearTextButton 拒绝出现在控件上。
这是我的风格:
<Style x:Key="DefaultPasswordBoxStyle"
TargetType="{x:Type PasswordBox}"
BasedOn="{StaticResource ResourceKey={x:Type PasswordBox}}">
<Setter Property="HorizontalContentAlignment">
<Setter.Value>Center</Setter.Value>
</Setter>
<Setter Property="FontSize">
<Setter.Value>16</Setter.Value>
</Setter>
</Style>
以及它在单独的 .xaml 文件中的用法:
<PasswordBox Margin="{StaticResource ControlMargin}"
controls:TextBoxHelper.ClearTextButton="True"
Style="{StaticResource DefaultPasswordBoxStyle}"
Width="200" />
如果我删除 Style 属性,按钮会按预期显示,但也希望能够应用我自己的样式。它实际上在 XAML 设计器中可见,这很有趣。我也尝试了 DynamicResource,但结果相同。
【问题讨论】:
-
我没有时间确认,只是作为评论,但是您的
BasedOn值指向 TargetType,而不是 Key,我认为您真正要寻找的是BasedOn="{StaticResource MetroPasswordBox}"至少从包含 PART_ClearText 按钮的default template 来看。 -
它说找不到资源 MetroPasswordBox。我是否需要包含 Metro.Controls 命名空间以外的内容?
-
您的风格是否存在于自己的资源字典中?如果是这样,您是否将 MahApps 资源字典声明为 MergedDictionary,以便它甚至知道到达您作为参考的样式的路径?
-
MahApps 文件的路径在 App.xaml 中,我自己的样式在单独的资源字典中。我会尝试以某种方式合并它并报告。这是到目前为止的样子 - app.box.com/s/5iub1259ndnrrz7v3215t617ny1uvbre 我已经包含了 App.xaml 和 MainSkin.xaml 文件。它都在那里。
-
是的,你只需要为所有东西提供找到彼此的路径,但要小心正确地做,否则你可能会给自己带来一些真正的性能问题。我今天要走了,干杯!
标签: c# wpf xaml mahapps.metro