WPF usercontrol自定义template
使用usrcontorl ,类似于customcontrol。
1.删除Grid
2.修改tempalte
<UserControl.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"></BooleanToVisibilityConverter>
<Style x:Key="UserControlStyle1" TargetType="{x:Type UserControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type UserControl}">
<Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
<Border.Background>
<ImageBrush ImageSource="Images/tv_search.png"/>
</Border.Background>
<Grid>
<TextBlock Visibility="{Binding ElementName=txtoutter,Path=Text.IsEmpty,Converter={StaticResource BooleanToVisibilityConverter }}" x:Name="txtinner" TextWrapping="Wrap" Text="搜索联系人" VerticalAlignment="Stretch" Margin="66,8,8,8" IsVisibleChanged="txtinner_IsVisibleChanged"/>
<TextBox x:Name="txtoutter" Height="Auto" TextWrapping="Wrap" VerticalAlignment="Stretch" Width="Auto" Margin="66,8,8,8" BorderThickness="0" Background="{x:Null}" PreviewKeyDown="txtoutter_PreviewKeyDown"/>
<!-- <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>-->
</Grid>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsFocused" Value="True" SourceName="txtoutter">
<Setter Property="Background" TargetName="border">
<Setter.Value>
<ImageBrush ImageSource="Images/tv_search_isfocused.png"/>
</Setter.Value>
</Setter>
</Trigger>
<!-- <DataTrigger Binding="{Binding ElementName=txtoutter,Path=Text}" Value="">
<Setter TargetName="txtinner" Property="UIElement.Visibility" Value="Visible"></Setter>
</DataTrigger>-->
<!-- <EventTrigger SourceName="txtinner" Actions="" ></EventTrigger>-->
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<!-- <EventSetter ></EventSetter>-->
</Style>
</UserControl.Resources>
主要使用Image\xxx.jpg 。
然后再后台中自定义事件
public event KeyEventHandler OnEnterTrigger;
public event DependencyPropertyChangedEventHandler OnRetriveItems;
private void txtoutter_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key ==Key.Enter)
{
if (OnEnterTrigger!=null)
{
OnEnterTrigger(sender, e);
}
}
}
private void txtinner_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
TextBlock text = sender as TextBlock;
if (text.Visibility == Visibility.Visible)
{
if (OnRetriveItems!=null)
{
OnRetriveItems(sender, e);
}
}
}
这样处理就可以避免在customcontro的后台代码中修改模版
比如
/* public override void OnApplyTemplate()
{
/* DependencyObject d = GetTemplateChild("txtoutter");
if (d != null)
{
(d as TextBox).Text = "test 123456789";
}#1#
/* TextBox textBlock = user.Template.FindName("txtoutter", user) as TextBox;
if (textBlock!=null)
{
textBlock.Text = "da nida ye ,wo zai zheli";
}#1#
base.OnApplyTemplate();
}
*/

浙公网安备 33010602011771号