【问题标题】:WPF: Adding a Trigger to a ButtonWPF:向按钮添加触发器
【发布时间】:2008-11-24 20:55:50
【问题描述】:

我目前正在编写一个带有 WPF UI 的程序,并且我有一个关闭或取消按钮,具体取决于页面上是否有任何更改。为了实现这一点,我想在按钮上使用触发器(以样式包装),以便当依赖属性 HasChanges 为 true 时,按钮将从“关闭”变为“取消”。到目前为止,我的程序将“关闭”显示为按钮的文本,但是当我的依赖属性 HasChanges 变为 true 时没有任何反应。 WPF 页面是用 VB.Net 而不是 XAML 编写的。

到目前为止我有:

Private Sub SetUpMyButton()
    Me.MyButton.Style = Me.GetMyButtonStyle()
End Sub

Private Function GetMyButtonStyle() As Style
    Dim hasChangesTrigger as New Trigger
    hasChangesTrigger.Property = CustomControl.HasChangesProperty
    hasChangesTrigger.Value = True
    hasChangesTrigger.Setters.Add(New Setter(Button.ContentProperty, "Cancel"))

    Dim hasChangesStyle as New Style
    hasChangesStyle.TargetType = GetType(Button)
    hasChangesStyle.Setters.Add(New Setter(Button.ContentProperty, "Close"))
    hasChangesStyle.Triggers.Add(hasChangesTrigger)
    hasChangesStyle.Seal()

    Return hasChangesStyle
End Function

非常感谢任何帮助。

【问题讨论】:

    标签: wpf vb.net triggers styles


    【解决方案1】:

    我不知道为什么要在代码中而不是 XAML 中执行此操作,但我认为这只是您的触发器不知道在哪里查找自定义依赖项属性。使用您的代码,它将在按钮本身上查找 HasChanges 属性。这是故意的吗?也许您需要设置TriggerSourceName 属性。或者可能完全使用不同的触发器类型(例如DataTrigger)会更容易。

    【讨论】:

    • 我不知道他为什么选择用代码来做,但你可能不知道 XAML 代码是不可混淆的,这是许多雇主所坚持的,尤其是在创建商业控制类库时。这是因为控件的大部分价值在于其控件模板和样式,如果将其留在 XAML 中,使用 BAML 查看器等工具的人很容易窃取因此将其放入代码中的原因。但 OP 可能有不同的原因。
    猜你喜欢
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多