【发布时间】:2013-09-26 13:12:51
【问题描述】:
我想使用 XAML 和一个自定义类创建一个自定义 TextBox,该类具有一个名为 PosType 的 TextBox 附加属性。 PosType 将被渲染在侧面的红色三角形内。
TextBox 应该是一个普通的文本框,从左边有足够的边距,不会拦截其他文本。
这是显示文本框所需外观的图像。
控制类:
public class PosTextBox : TextBox
{
public string PosType { get; set; }
}
**我写的样式:(与我想要的非常相似,除了这里我使用了边框,其他部分可能不准确。**
xmlns:Pro="clr-namespace:Prox.XamlControls">
<!-- Custom TextBox -->
<Style x:Key="c1PosTextBox" TargetType="{x:Type Pro:PosTextBox}" >
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Pro:PosTextBox}">
<Grid>
<Border>
<Border>
<TextBlock Text ="{TemplateBinding Path= Pro:PosType}"></TextBlock>
<!--<TextBlock Text ="{TemplateBinding ElementName=Pro:PosTextBox, Path= Pro:PosType}"></TextBlock>-->
</Border>
</Border>
<Border Margin="5,10,5,10">
<ContentPresenter Name="Content" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" TextBlock.Foreground="White"></ContentPresenter>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
如何创建此自定义文本框并获得所需的外观?
编辑: 请指导我根据我上面提到的相同方法解决小问题。
【问题讨论】:
-
我认为Adorners 是你要找的
-
我很确定它可以通过两种方式完成,如果有人愿意分享,我希望听到关于这两种方法的答案。感谢提及这一点
-
使用装饰器和附加行为来实现这一点,比为每个 UI 功能使用自定义类型(如
PosTextBox)更灵活。 -
在尝试了一些建议的方法之后,我在这个案例上坚持了下来,根据我的需要,我想要与我在问题中提供的完全相同的方法,如果有人知道我该如何解决我提供的工作代码请以这种方式帮助我。