ControlTemplate Trigger无法在设计器中工作(运行时ok)

时间:2016-08-01 09:21:19

标签: wpf visual-studio xaml dependency-properties wpf-style

我有一个从Window派生的自定义控件:

class LVSDialog : Window

使用DependencyProperty ShowCloseButton

和带有ControlTemplate和Trigger的样式:

<Style TargetType="{x:Type loc:LVSDialog}" x:Key="LVSDialogStyle">
    ...
    <Setter Property="Template">
        ...
        <Button x:Name="closeButton" />
        ...
        <ControlTemplate.Triggers>
            <Trigger Property="loc:LVSDialog.ShowCloseButton" Value="False">
                <Setter TargetName="closeButton" Property="Visibility" Value="Collapsed" />
            </Trigger>
        </ControlTemplate.Triggers>            
    </Setter>

在运行时一切正常,但在Designer中,如果我更改此属性,它就不会有效 - 按钮始终可见:

<loc:LVSDialog ...
    ShowCloseButton="False" Style="{StaticResource LVSDialogStyle}">

我在google和这里搜索了一个解决方案 - 所有问题都与运行时功能有关,设计师问题要么没有答案,要么没有工作建议。

在设计时可以使用全部功能吗?

P.S。我的VisualStudio是2012. Framework 4.0

1 个答案:

答案 0 :(得分:1)

如果将基类更改为Control而不是Window,它将起作用:

  public class LVSDialog : Control
  {


    public bool ShowCloseButton
    {
      get { return (bool)GetValue(ShowCloseButtonProperty); }
      set { SetValue(ShowCloseButtonProperty, value); }
    }

    // Using a DependencyProperty as the backing store for ShowCloseButton.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ShowCloseButtonProperty =
        DependencyProperty.Register("ShowCloseButton", typeof(bool), typeof(LVSDialog), new PropertyMetadata(true));


  }
  

来自Topicstarter:

我已更改为Control,添加了内部窗口,将其内容设置为我的控件并添加了Show()和ShowDialog()方法:

private Window parentWindow;
...
public void Show()
{
    if (parentWindow == null)
    {
        parentWindow = new Window {Content = this, WindowStyle = ...};
    }
    parentWindow.Show();
}

一切正常,设计师将所有属性“直播”。