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();
}
*/

 

posted @ 2014-04-12 16:01  penney  阅读(977)  评论(0)    收藏  举报