扩展TextBox控件并更改默认样式的一部分

5
我希望创建一个WPF TextBox的类库(dll文件),并增加扩展功能。但是我想要更改TextBox默认样式(IsMouseOver属性触发器)的一部分。
我创建了一个新的WPF用户控件库项目,删除了生成的.XAML和.CS文件,并添加了一个新的类文件。然后我从TextBox类派生,但我不知道如何访问样式XAML。
我无法弄清楚应该如何完成这个任务...
在我的项目中,我目前只有这个.CS文件,没有.XAML文件:
namespace CustomControls
{
    public class CustomTextBox : TextBox
    {
        private string customProperty;
        public string CustomProperty
        {
            get { return customProperty; }
            set { customProperty = value; }
        }
    }
}

如果您只需在设计器中右键单击并选择“编辑模板”->“编辑副本”,然后在模板内部修改所需内容,那么这不是更容易吗? - adminSoftDK
是的,但我在代码后面有其他功能要包含在自定义文本框中。为了简单起见,我没有在这里包含它。我想要一个可重用的控件,其中包括组合的代码和样式更改功能。不管怎样,你知道是否可以像我想要的那样在dll库中完成吗? - moonlander
当然可以,你只需要添加一个新的UserControl,并将其命名为CustomTextBox(如果这是你想要的),然后用TextBox替换Tag UserControl。从此时起,你可以像使用用户控件一样使用这个TextBox,但你仍然可以访问你的代码。我发现这比自定义控件容易得多。 - adminSoftDK
1个回答

10
您可以像这样做:
<TextBox x:Class="CustomControls.MyFolder.CustomTextBox"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

</TextBox>

代码后台

public partial class CustomTextBox : TextBox
{
    public CustomTextBox()
    {
        InitializeComponent();
    }
}

现在您可以在xaml中进行任何想做的事情(编辑模板,应用样式等),并且您可以从代码中访问它。

谢谢!这正是我想要的。 - moonlander
很高兴能帮忙 :) - adminSoftDK
很遗憾,我尝试过这个方法,但是当将DLL导入到另一个项目时,XAML对控件没有影响。 - moonlander
@moonlander,你能否编辑你的问题并展示你已经做了什么?我们经常使用这种方法,而且它很有效。 - adminSoftDK
没关系,我忘记添加InitializeComponent();了。 - moonlander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接