WPF创建搜索框

时间:2016-03-14 13:06:44

标签: c# wpf custom-controls

我正在尝试创建一个搜索文本框,其中我有一个文本框区域和按钮。到目前为止,我达到了预期的布局:

<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; }
        }

现在我想访问此按钮和文本框,以便我可以单独定义其名称,内容等。

我该怎么做?

2 个答案:

答案 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很重要,有时候模板没有正确应用。