【问题标题】:MahApps PasswordBox not showing the clear buttonMahApps PasswordBox 未显示清除按钮
【发布时间】: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


【解决方案1】:

因此,要从最初的 cmets 继续,您将 Type 设置为您的资源,而不是指向密钥名称。因此,一旦您为新的自定义模板提供了正确的路径以找到原始样式模板作为BasedOn 条件以继承其余的 MahApps 样式,那么问题就解决了。

VS 下划线/没有找到资源的东西,我一直遇到这个问题,我有点相信这是 VS 的一个缺陷,尽管我也不介意知道如何清除它。这很烦人,因为有时它会在 IDE 中出现这些错误,有时不会,很有趣。

与此同时,既然您的模板引用了正确的模板作为其基础,并且正确引用了资源字典,那么一切都很好了。希望这会有所帮助,干杯!

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    相关资源
    最近更新 更多