自定义控制BorderThickness

时间:2015-01-28 10:09:45

标签: c# wpf textbox user-controls border

我已经创建了自定义WPF用户控件。问题是,有时我需要BorderThickness为0,有时BorderThickness为1.

<UserControl ...>
   <clay:TextBox x:Name="ClayTextBox" 
            BorderThickness="1" >
   </clay:TextBox>
</UserControl>

如果我在这样的xaml文档中使用该控件:

<clay:TextBox x:Name="ClayTextBox" 
    BorderThickness="0" >
 </clay:TextBox>

......边界始终是1.我该如何解决?

2 个答案:

答案 0 :(得分:3)

在自定义控件模板样式中,应将父容器控件设置为边框,然后使用模板绑定绑定边框粗细。在这里,我假设您的CustomControl继承了一个将BorderThickness作为属性的控件。

<ControlTemplate TargetType="{x:Type clay:TextBox}">
    <Border BorderThickness="{TemplateBinding BorderThickness}">
          //Remaining xaml that makes up your custom control.
    </Border>
</ControlTemplate>

答案 1 :(得分:0)

让你的边界将其BorderThickness属性绑定到这样的UserControl:

<UserControl x:Class="UseRcontrolWithProperty.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" x:Name="this"
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
          <Border BorderThickness="{Binding ElementName=this, Path=BorderThickness}"></Border>  
    </Grid>
</UserControl>

这样改变UserControl上的BorderBrush将改变内部边框的边框画笔。