2012-04-04 2 views
0
<Style x:Key="MyButton" TargetType="{x:Type Border}"> 
     <Style.Resources> 
      <Style TargetType="{x:Type TextBlock}">      
       <Setter Property="FontSize" Value="24"/> 
       <Setter Property="Foreground" Value="{StaticResource FontColor}"/>      
       <Setter Property="HorizontalAlignment" Value="Center"/> 
       <Setter Property="Cursor" Value="Hand"/> 
       <Setter Property="FontWeight" Value="DemiBold" /> 
       <Setter Property="Effect"> 
        <Setter.Value> 
         <BlurEffect Radius="2" ></BlurEffect> 
        </Setter.Value> 
       </Setter> 
       <Style.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="FontWeight" Value="ExtraBold" /> 
        </Trigger>             
       </Style.Triggers> 
      </Style> 
     </Style.Resources> 
    </Style> 

Я хочу создать собственный стиль кнопки, состоящий из границы и текстового блока. Как добавить элемент управления в мой стиль? Я действительно хочу добавить дополнительный текстовый блок, чтобы я мог размыть текстовое поле, которое находится в задней части, что похоже на свечение.Добавить элемент управления в стиль wpf

ответ

2

Я не уверен точно, как вы хотите, чтобы ваш второй размытый текстовый блок выглядел, но следующий xaml должен хорошо вам помочь в создании шаблона кнопки, за которым вы после.

Каждый TextBlock, а также границы, имеют свои собственные стили, так что вы можете стилизовать их по отдельности и обернуть их все внутри шаблона управления вашего стиля кнопки:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <Style x:Key="MainTextBlock" TargetType="{x:Type TextBlock}"> 
     <Setter Property="FontSize" Value="24"/> 
     <Setter Property="Foreground" Value="Blue"/> 
     <Setter Property="HorizontalAlignment" Value="Center"/> 
     <Setter Property="Cursor" Value="Hand"/> 
     <Setter Property="FontWeight" Value="DemiBold" /> 
     <Style.Triggers> 
      <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="FontWeight" Value="ExtraBold" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

    <Style x:Key="BlurTextBlock" TargetType="{x:Type TextBlock}"> 
     <Setter Property="FontSize" Value="24"/> 
     <Setter Property="Foreground" Value="Blue"/> 
     <Setter Property="HorizontalAlignment" Value="Center"/> 
     <Setter Property="Cursor" Value="Hand"/> 
     <Setter Property="FontWeight" Value="DemiBold" /> 
     <Setter Property="Effect"> 
      <Setter.Value> 
       <BlurEffect Radius="2" ></BlurEffect> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style x:Key="BorderStyle" TargetType="Border"> 
     <Setter Property="BorderBrush" Value="Orange" /> 
     <Setter Property="BorderThickness" Value="2" /> 
    </Style> 

    <Style x:Key="MyButton" TargetType="Button"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="Button"> 
        <Border Style="{StaticResource BorderStyle}"> 
         <Grid> 
          <TextBlock Style="{StaticResource MainTextBlock}" Text="{TemplateBinding Content}" /> 
          <TextBlock Style="{StaticResource BlurTextBlock}" /> 
         </Grid> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Window.Resources> 
<Grid> 
    <Button Style="{StaticResource ResourceKey=MyButton}" Height="30" Width="100" Content="BUTTON" /> 
</Grid></Window> 
0

Кнопка не имеет свойство Text, оно имеет свойство Content.

Свойство Content может быть строкой, но вы не можете ожидать, что она всегда будет строкой.

Проблема в том, что вы хотите стилизовать контент, но не можете. Это контейнер. Вы можете добавить изображение или сетку или целую иерархию xaml в свойство Content.

Так что вам нужно добавить TextBlock к Контенту.

<Button HorizontalAlignment="Left" Margin="190,113,0,0" VerticalAlignment="Top" Width="75"> 
    <Button.Content> 
     <Grid> 
      <TextBlock Text="Click Me!" /> 
      <TextBlock Text="Click Me!"> 
       <TextBlock.Effect> 
        <BlurEffect Radius="2" /> 
       </TextBlock.Effect> 
      </TextBlock> 
     </Grid> 
    </Button.Content> 
</Button> 

Так что это, кажется, не нужен стиль, он просто нуждается в вас, чтобы добавить Свойс Content свойству Button.Content.

Смежные вопросы