wpf 将值传递给控件模板依赖项属性

kjthegm6  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(114)

如何设置从自定义控件定义中获取的控件模板值中的CornerRadious的值. Please help XAML for User Control

<UserControl x:Class="Biz10.RoundedCornerTextBox"
                 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" 
                 xmlns:local="clr-namespace:Biz10"
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
        <UserControl.Resources>
            <ControlTemplate x:Key="TextBoxBaseControlTemplate" TargetType="{x:Type TextBoxBase}">
                <Border Background="{TemplateBinding Background}" 
                    x:Name="Bd" BorderBrush="Gray"
                    BorderThickness="1" **CornerRadius="5"**>
                    <ScrollViewer x:Name="PART_ContentHost"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" TargetName="Bd"/>
                        <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                    </Trigger>
                    <Trigger Property="Width" Value="Auto">
                        <Setter Property="MinWidth" Value="100"/>
                    </Trigger>
                    <Trigger Property="Height" Value="Auto">
                        <Setter Property="MinHeight" Value="20"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </UserControl.Resources>
        <Grid>
            <TextBox Template="{StaticResource TextBoxBaseControlTemplate}" Height="25" Margin="5"></TextBox>
        </Grid>
    </UserControl>

C#代码文件

using System.Windows.Media.Imaging;
using System.Windows.Navigation;

using System.Windows.Shapes;

namespace Biz10
{
    /// <summary>
    /// Interaction logic for CornerTextBox.xaml
    /// </summary>
    public partial class RoundedCornerTextBox : UserControl
    {
        public static readonly DependencyProperty _cornrerRadious= DependencyProperty.Register("CornerRadious", typeof(int), typeof(RoundedCornerTextBox));
    public RoundedCornerTextBox()
    {
        InitializeComponent();
    }
    public int CornerRadious
    {
        get
        {
            return (int)GetValue(_cornrerRadious);
        }
        set
        {
            SetValue(_cornrerRadious, value);
        }
    }
}

}
我想在Windows中声明一个自定义控件,

<custome:RoundedCornerTextBox CornerRadious="7" Grid.Row="2" Grid.Column="2" Grid.ColumnSpan="7" x:Name="txtAccountName" ></custome:RoundedCornerTextBox>

有没有可能

l2osamch

l2osamch1#

您必须像下面这样更改UserControlTemplate

<UserControl.Template>
    <ControlTemplate TargetType="UserControl">
        <Border BorderThickness="3" 
                BorderBrush="#FFF0B0B0"
                CornerRadius="{Binding CornerRadius, RelativeSource={RelativeSource AncestorType=UserControl}}">
            <Grid>
                <TextBox Width="100"/>
            </Grid>
        </Border>
    </ControlTemplate>
</UserControl.Template>

查看CornerRadius属性是如何绑定的。

am46iovg

am46iovg2#

您不需要封闭的UserControl。只需创建一个名为RoundedCornerTextBox的自定义控件(http://www.wpftutorial.net/howtocreateacustomcontrol.html),
1.扩展文本框
1.将其模板更改为您所需的模板
1.公开一个新的CornerRadius依赖项属性,
1.使用TemplateBinding将此属性连接到模板内的Border。

相关问题