我正在尝试创建一个搜索文本框,其中我有一个文本框区域和按钮。到目前为止,我达到了预期的布局:
<Style TargetType="{x:Type local:SearchTextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:SearchTextBox}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<StackPanel Orientation="Horizontal"
Width="200">
<TextBox Width="150" TextWrapping="Wrap" AcceptsReturn="True"/>
<Button Width="50" Content="Browse"></Button>
</StackPanel>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后我创建了控件:
static SearchTextBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(SearchTextBox), new FrameworkPropertyMetadata(typeof(SearchTextBox)));
}
TextBox txtFileName = null;
public TextBox TxtFileName
{
get { return txtFileName; }
set { txtFileName = value; }
}
Button btnBrowse = null;
public Button BtnBrowse
{
get { return btnBrowse; }
set { btnBrowse = value; }
}
现在我想访问此按钮和文本框,以便我可以单独定义其名称,内容等。
我该怎么做?
答案 0 :(得分:2)
在您的情况下,您只需使用 UserControls 即可创建自定义控件。
以下是创建示例usercontrol的链接。根据您的要求扩展控制
http://www.c-sharpcorner.com/UploadFile/mahesh/user-control-in-wpf/
答案 1 :(得分:1)
在课堂上覆盖此方法。 public virtual void OnApplyTemplate()。 然后创建并实例化您需要的控件。 这些方面的东西:
GetTemplatechild将允许您获取已定义的任何依赖项对象。给他们一个名字(x:Name =“foo”)。
public override void OnApplyTemplate()
{
DependencyObject ButtonControlInTemplate = GetTemplateChild("searchbutton");// set the name as the x:Name for the controls in your xaml.
Button SearchButton = (Button)ButtonControlInTemplate;
DependencyObject TextBoxInTemplate = GetTemplateChild("searchinputfield"); // set the name as the x:Name for the controls in your xaml.
TextBox InputTextBox = (TextBox)TextBoxInTemplate;
base.OnApplyTemplate();
}
NB。检查null很重要,有时候模板没有正确应用。