您的位置:首页 > 其它

获取资源字典的控件模板的控件实例方法

2015-09-22 17:44 453 查看
MessageBoxGeneric.xaml

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:JetSun.Presentation"
xmlns:js="clr-namespace:JetSun.Presentation.Markups">
<Style TargetType="local:MessageBoxControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:MessageBoxControl">
<Grid FlowDirection="{Binding ContentFlowDirection}" MaxWidth="600">
<Grid.RowDefinitions>
<RowDefinition Height="55" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>

<Image Source="{Binding MessageImageSource}" HorizontalAlignment="Left" VerticalAlignment="Center" Height="32" Width="32" Margin="10 0 0 0" />

<TextBlock Text="{Binding Message}" Grid.RowSpan="2" Grid.Column="1" TextWrapping="Wrap" TextAlignment="Left" HorizontalAlignment="{Binding ContentTextAlignment}" VerticalAlignment="Center" Margin="10 10 10 10" />

<Border Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" BorderThickness="0 1 0 0" Margin="3">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0 0 5 0" >
<Button Content="是" Visibility="{Binding YesNoVisibility}" Command="{Binding YesCommand}" IsDefault="{Binding IsYesDefault}" Margin="5 5 5 5"   Width="80" x:Name="PART_YesButton" IsTabStop="True" TabIndex="0"/>
<Button Content="否" Visibility="{Binding YesNoVisibility}" Command="{Binding NoCommand}" IsDefault="{Binding IsNoDefault}" Margin="5 5 5 5"  Width="80" x:Name="PART_NoButton" IsTabStop="True" TabIndex="1" />
<Button Content="确认" Visibility="{Binding OkVisibility}" Command="{Binding OkCommand}" IsDefault="{Binding IsOkDefault}" Margin="5 5 5 5" Width="80" x:Name="PART_OkButton" IsTabStop="True" TabIndex="2" />
<Button Content="取消" Visibility="{Binding CancelVisibility}" Command="{Binding CancelCommand}" IsDefault="{Binding IsCancelDefault}" Margin="5 5 5 5"  Width="80" x:Name="PART_CancelButton" IsTabStop="True" TabIndex="3" />
</StackPanel>
</Border>
</Grid>

</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>


取出控件模板的控件实例方法:

public class MessageBoxControl : Control
{
static MessageBoxControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MessageBoxControl), new FrameworkPropertyMetadata(typeof(MessageBoxControl)));
}

Button _btnYes;
Button _btnNo;
Button _btnOk;
Button _btnCancel;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();

_btnYes = GetTemplateChild("PART_YesButton") as Button;
_btnNo = GetTemplateChild("PART_NoButton") as Button;
_btnOk = GetTemplateChild("PART_OkButton") as Button;
_btnCancel = GetTemplateChild("PART_CancelButton") as Button;
}

protected override void OnGotFocus(RoutedEventArgs e)
{
MessageBoxViewModel model = this.DataContext as MessageBoxViewModel;
if (model.IsYesDefault) { _btnYes.Focus(); }
if (model.IsNoDefault) { _btnNo.Focus(); }
if (model.IsOkDefault) { _btnOk.Focus(); }
if (model.IsCancelDefault) { _btnCancel.Focus(); }
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: