【发布时间】:2011-10-01 01:28:22
【问题描述】:
我在 WPF 中创建了自己的控件。最初我将它创建为用户控件,但发现这样做的首选方法是创建一个从控件继承的类,然后将我各自的 xaml 放在Generic.xaml 内的控件模板中。
当它在我的 exe 中时效果很好,但是当我将它移动到 dll 时,边框从我的控件中消失了。我的控件基于文本框,几乎是文本框控件模板的复制和粘贴,并添加了一个用户可以单击的按钮。
我已经确定了控件模板的相关部分不起作用,即下面的BorderBrush="{TemplateBinding Border.BorderBrush}" 位以及下一行。
<Style TargetType="{x:Type local:ButtonBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ButtonBox}">
<mwt:ListBoxChrome
Background="{TemplateBinding Panel.Background}"
BorderBrush="{TemplateBinding Border.BorderBrush}"
BorderThickness="{TemplateBinding Border.BorderThickness}"
RenderMouseOver="{TemplateBinding UIElement.IsMouseOver}"
RenderFocused="{TemplateBinding UIElement.IsKeyboardFocusWithin}"
Name="Bd"
SnapsToDevicePixels="True">
我了解模板绑定,但我不明白为什么要绑定到Border.BorderBrush。我们绑定的border 在哪里?可视化树没有显示属于我的控件的边框。如果我用硬编码值替换这两行,那么我会得到一个边框。我怀疑dll中可能缺少exe具有的某些内容,例如样式或适用于Border的内容??
在此先感谢您的任何回复以及花时间阅读的任何人。 干杯, 迈克尔
【问题讨论】:
-
我认为你应该看到
TextBox默认Template。据我所知,近 90% 的控件使用Border作为第一个Template标签。可能是你的“影子”边界?也可以试试snoop UI 调试器。 -
你很亲密。答案是查看文本框的默认样式,而不是模板。这包含相关信息。
标签: wpf wpf-controls controltemplate generic.xaml