我想在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>
答案 0 :(得分:1)
首先让我们清楚任何FrameworkControl
包括UserControl
都可以设置风格,但我怀疑你可能会提到的是替换控件模板的能力。需要自定义模板化控件。
你的问题的答案是:是的,当然是。
您可以使用自己喜欢的默认模板创建自定义模板化控件。
为Caption和FilterText添加依赖属性。
使用TemplateBinding将Captiona和Filter文本连接到默认模板中的元素。
您需要指定模板,需要TextBox
类型的TemplatePart。
您可以编写代码来监视TextBox中的更改,以便控件更新其Filter属性。