控件模板触发器不工作的设计师(运行时确定)

问题描述:

我从窗口派生的自定义控制:控件模板触发器不工作的设计师(运行时确定)

class LVSDialog : Window 

与DependencyProperty的ShowCloseButton

,并与控件模板,并触发风格:

<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> 

一切运行正常,但在设计器中,如果我更改此属性不需要sence - 按钮始终可见:

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

...我已经寻找在谷歌和这里的解决方案 - 所有的问题都是有关运行功能,设计问题或者是没有答案或不工作的建议。

设计时是否可以使用全功能?

P.S.我VisualStudio的是2012年框架4.0

+0

是否有一个特殊的原因,你使用触发器,而不是简单的'TemplateBinding'? – lokusking

+0

@lokusking你的意思是''?这也适用于运行时,但不是在设计师:( –

+0

最好的建议,你可以得到的是,不要相信设计师,并避免使用它不惜一切代价 – Kcvin

如果你改变了基类来控制的,而不是窗户,将工作:

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:

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

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

一切正常,设计师显示所有属性“生活”。

+0

我应该如何使用它?作为空窗口的内容?什么样的造型?我需要自定义窗口的原因 - 是我想要它可以拖曳和风格。我怎样才能达到最好? –

+0

好的,这个工程。谢谢。 我添加了内部窗口,包含我的自定义控件和显示()和ShowDialog(),调整后的风格和它的工作 –

+0

我不确定,但我不会使用一个窗口作为内嵌控件(另一个控件的子项) 如果要拖动一个可视元素内联改变其在视觉层次结构中的位置),您可以使用RenderTransform或LayoutTransform 如果您想更*地拖动它(如浮动工具栏或可停靠窗口)我可能会把(内容)控件放在一个窗口中,当拖动和浮动时,将其放在窗口中。 但它只是想法 - 我没有使用/测试它。 –