Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从其他资源设置WPF按钮文本块样式?_Wpf_Xaml_Controltemplate - Fatal编程技术网

如何从其他资源设置WPF按钮文本块样式?

如何从其他资源设置WPF按钮文本块样式?,wpf,xaml,controltemplate,Wpf,Xaml,Controltemplate,我正在WPF应用程序中设置按钮样式,如下所示: <Style TargetType="{x:Type Button}"> <Setter Property="ToolTipService.InitialShowDelay" Value="0"/> <Setter Property="Height" Value="22" /> <Se

我正在WPF应用程序中设置按钮样式,如下所示:

<Style TargetType="{x:Type Button}">
    <Setter Property="ToolTipService.InitialShowDelay" Value="0"/>
    <Setter Property="Height" Value="22" />
    <Setter Property="Margin" Value="1" />
    <Setter Property="Padding" Value="0" />
    <Setter Property="VerticalAlignment" Value="Center" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        Padding="{TemplateBinding Padding}"
                        BorderThickness="1">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="1 -1 1 0"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Background" Value="{StaticResource NotSelectedButton}" />
    <Setter Property="Foreground" Value="{StaticResource ActiveFg}" />
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="{StaticResource Selected}" />
            <Setter Property="Foreground" Value="{StaticResource SelectedFg}" />
        </Trigger>
        <Trigger Property="IsMouseOver" Value="False">
            <Setter Property="Background" Value="{StaticResource NotSelectedButton}" />
            <Setter Property="Foreground" Value="{StaticResource ActiveFg}" />
        </Trigger>
        <Trigger Property="IsEnabled" Value="False">
            <Setter Property="Background" Value="{StaticResource NotSelectedButton}" />
            <Setter Property="Foreground" Value="{StaticResource InactiveFg}" />
            <!--<Setter Property="Foreground" Value="{StaticResource NotSelected}" />-->
        </Trigger>
    </Style.Triggers>
</Style>
要测试此样式,只需在
用户控件
窗口
中的
按钮
就足够了:
,样式定义可以放在资源字典中(属于
用户控件
窗口

我如何才能做到这一点?

通过直接分配的简单解决方案 通过将
文本块
指定为每个
按钮的
内容
,可以直接设置样式

<Button>
   <TextBlock Text="Test" Style="{StaticResource ButtonText}"/>
</Button>
支持所有内容类型 如果您想支持任何内容类型作为按钮的内容,可以从上面的
ContentPresenter.Resources
中定义数据模板。然后,如果
内容
字符串,则
ContentPresenter
将仅应用它。对于所有其他内容类型,它将照常工作

<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="1 -1 1 0">
   <ContentPresenter.Resources>
      <DataTemplate DataType="{x:Type system:String}">
         <TextBlock Style="{StaticResource ButtonText}" Text="{Binding}"/>
      </DataTemplate>
   </ContentPresenter.Resources>
</ContentPresenter>

ContentPresenter的最后一个选项。资源是完美的。
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="1 -1 1 0">
   <ContentPresenter.ContentTemplate>
      <DataTemplate>
         <TextBlock Style="{StaticResource ButtonText}" Text="{Binding}"/>
      </DataTemplate>
   </ContentPresenter.ContentTemplate>
</ContentPresenter>
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="1 -1 1 0">
   <ContentPresenter.Resources>
      <DataTemplate DataType="{x:Type system:String}">
         <TextBlock Style="{StaticResource ButtonText}" Text="{Binding}"/>
      </DataTemplate>
   </ContentPresenter.Resources>
</ContentPresenter>