FilterControl - 用户操作系统自定义控件?

时间:2011-06-20 08:26:48

标签: silverlight user-controls custom-controls

我想在Silverlight中创建一个FilterControl: [标题] [文本框] [清除按钮]

我想将它创建为样式控件,具有清除按钮功能(我不想将其留给其他开发人员),以及属性(Caption,FilterText)。

但据我所知,第一个是自定义控件,第二个和第三个是用户控制功能。

是否有可能创造出类似的东西?


以下是CC的代码:

<!-- Built-In Style for FilterControl -->
<Style TargetType="Controls:FilterControl">
    <Setter Property="Template">
        <Setter.Value>
            <!-- ControlTemplate -->
            <ControlTemplate TargetType="Controls:FilterControl">
                <!-- Template's Root Visual -->
                <Grid x:Name="LayoutRoot">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="{TemplateBinding Height}"/>
                    </Grid.RowDefinitions>

                    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">

                        <!--FilterCaption PART-->
                        <TextBlock x:Name="FilterCaptionTextBlock" Text="{TemplateBinding FilterCaption}" VerticalAlignment="Center" />

                        <!--FilterTextBox PART-->
                        <TextBox x:Name="FilterTextBox"
                               HorizontalAlignment="Center" Text="{Binding FilterText, Mode=TwoWay}" IsEnabled="{Binding IsEnabled}" VerticalAlignment="Center" />
                        <!--<TextBox x:Name="FilterTextBox"
                               HorizontalAlignment="Center" Text="{TemplateBinding FilterText}" IsEnabled="{Binding IsEnabled}" VerticalAlignment="Center" />-->

                        <!--ClearFilterTextButton PART-->
                        <Button x:Name="ClearFilterTextButton"
                               Content="X" IsEnabled="{TemplateBinding IsEnabled}" VerticalAlignment="Center" />

                    </StackPanel>

                    <!--VisualStateManager-->
                    <VisualStateManager.VisualStateGroups>
                        ...
                    </VisualStateManager.VisualStateGroups>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 个答案:

答案 0 :(得分:1)

首先让我们清楚任何FrameworkControl包括UserControl都可以设置风格,但我怀疑你可能会提到的是替换控件模板的能力。需要自定义模板化控件。

你的问题的答案是:是的,当然是。

您可以使用自己喜欢的默认模板创建自定义模板化控件。

为Caption和FilterText添加依赖属性。

使用TemplateBinding将Captiona和Filter文本连接到默认模板中的元素。

您需要指定模板,需要TextBox类型的TemplatePart。

您可以编写代码来监视TextBox中的更改,以便控件更新其Filter属性。