Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.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_Expression Blend - Fatal编程技术网

WPF按钮和文本块样式是如何关联的?

WPF按钮和文本块样式是如何关联的?,wpf,expression-blend,Wpf,Expression Blend,我为“默认”按钮创建了自定义样式,还为文本块创建了自定义样式。如果我完全删除TextBlock样式,一切都正常,但是一旦由于某种原因添加了TextBlock样式,按钮样式将在按钮的文本“默认”状态下使用。这里似乎正在进行某种继承,但我看不到msdn文档中的位置。发生什么事了 我使用的是Expression Blend 4,另一件奇怪的事情是Blend中的预览看起来很好,但是当我运行应用程序时,按钮样式在默认状态下是不正确的。下面是一些样式,似乎有冲突: <ResourceD

我为“默认”按钮创建了自定义样式,还为文本块创建了自定义样式。如果我完全删除TextBlock样式,一切都正常,但是一旦由于某种原因添加了TextBlock样式,按钮样式将在按钮的文本“默认”状态下使用。这里似乎正在进行某种继承,但我看不到msdn文档中的位置。发生什么事了

我使用的是Expression Blend 4,另一件奇怪的事情是Blend中的预览看起来很好,但是当我运行应用程序时,按钮样式在默认状态下是不正确的。下面是一些样式,似乎有冲突:

        <ResourceDictionary>

        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <Trigger Property="IsMouseOver"
                         Value="True">
                    <Setter Property="Foreground">
                        <Setter.Value>
                            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                <GradientStop Color="White" Offset="0"/>
                                <GradientStop Color="#FFFDFF00" Offset="1"/>
                            </LinearGradientBrush>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
                    <Setter Property="RenderTransform">
                        <Setter.Value>
                            <TransformGroup>
                                <ScaleTransform ScaleY="1.20" ScaleX="1.20"/>
                                <SkewTransform/>
                                <RotateTransform/>
                                <TranslateTransform/>
                            </TransformGroup>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Button}">
                        <Grid>
                            <ContentPresenter RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}">
                                <ContentPresenter.Effect>
                                    <DropShadowEffect BlurRadius="3" ShadowDepth="4"/>
                                </ContentPresenter.Effect>
                            </ContentPresenter>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsFocused" Value="True"/>
                            <Trigger Property="IsDefaulted" Value="True"/>
                            <Trigger Property="IsMouseOver" Value="True"/>
                            <Trigger Property="IsPressed" Value="True"/>
                            <Trigger Property="IsEnabled" Value="False"/>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="FontFamily" Value="/Rtk;component/Fonts/#Segoe Print"/>
            <Setter Property="FontWeight" Value="Bold"/>
            <Setter Property="FontSize" Value="18"/>
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="VerticalAlignment" Value="Center"/>
            <Setter Property="Background" Value="{x:Null}"/>
        </Style>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="TextWrapping" Value="NoWrap"/>
            <Setter Property="TextTrimming" Value="None"/>
            <Setter Property="Foreground" Value="White"/>
            <Setter Property="FontSize" Value="16"/>
            <Setter Property="Effect">
                <Setter.Value>
                    <DropShadowEffect BlurRadius="3" ShadowDepth="4"/>
                </Setter.Value>
            </Setter>
            <Setter Property="FontFamily" Value="/Rtk;component/Fonts/#Segoe Print"/>
        </Style>
    </ResourceDictionary>

这就是我使用按钮控件本身的方式:

<Button Content="Button Text" FontSize="24"/>  

(请注意,此fontsize与我在默认样式18中指定的大小不同-我希望在该按钮的情况下覆盖它)

编辑: 在MainWindow.xaml中,实际的按钮条目如下所示,除了我从App.xaml中提出的样式更改之外,没有其他自定义项:

<Button Content="Button" HorizontalAlignment="Left" Margin="336,0,0,274.226" VerticalAlignment="Bottom" Width="75"/>

为了说明我所看到的情况:


只是一个快速猜测,但是当按钮的内容是字符串时,它不是默认的文本块吗?

只是一个快速猜测,但是当按钮的内容是字符串时,它不是默认的文本块吗?

只查看您发布的代码,我看不出TextBlock样式会以任何方式影响按钮的外观,除非按钮的内容(直接或间接)由TextBlock组成。您能否发布一个更完整的代码示例,可能包括按钮的XAML?

仅查看您发布的代码,我看不出TextBlock样式会以任何方式影响按钮的外观,除非按钮的内容(直接或间接)由TextBlock组成。您能否发布一个更完整的代码示例,可能包括按钮的XAML?

正如人们所建议的,您的按钮包含一个创建用于保存内容的文本块,它从app.XAML中获取样式,您可以通过几种方式解决此问题,以下是几点:

将显式文本块放入按钮中,不应用样式:

  <Button Margin="272,192,277,0" VerticalAlignment="Top">
        <TextBlock Text="Button" Style="{x:Null}"/>
    </Button>

在按钮样式中添加一个文本块,并使用空样式:

 <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
      <TextBlock Text="{TemplateBinding Content}" Style="{x:Null}">
                       <TextBlock.Effect>
                          <DropShadowEffect BlurRadius="3" ShadowDepth="4"/>
                       </TextBlock.Effect>
      </TextBlock>
         </Grid>
              <ControlTemplate.Triggers>
                  <Trigger Property="IsFocused" Value="True"/>
                  <Trigger Property="IsDefaulted" Value="True"/>
                  <Trigger Property="IsMouseOver" Value="True"/>
                  <Trigger Property="IsPressed" Value="True"/>
                  <Trigger Property="IsEnabled" Value="False"/>
                </ControlTemplate.Triggers>
              </ControlTemplate>
            </Setter.Value>


希望这两个按钮中的一个能为您工作。

正如人们所建议的,您的按钮包含一个用于保存内容的文本块,它从app.xaml中提取样式,您可以通过几种方式解决此问题,以下是几点:

将显式文本块放入按钮中,不应用样式:

  <Button Margin="272,192,277,0" VerticalAlignment="Top">
        <TextBlock Text="Button" Style="{x:Null}"/>
    </Button>

在按钮样式中添加一个文本块,并使用空样式:

 <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="{x:Type Button}">
                <Grid>
      <TextBlock Text="{TemplateBinding Content}" Style="{x:Null}">
                       <TextBlock.Effect>
                          <DropShadowEffect BlurRadius="3" ShadowDepth="4"/>
                       </TextBlock.Effect>
      </TextBlock>
         </Grid>
              <ControlTemplate.Triggers>
                  <Trigger Property="IsFocused" Value="True"/>
                  <Trigger Property="IsDefaulted" Value="True"/>
                  <Trigger Property="IsMouseOver" Value="True"/>
                  <Trigger Property="IsPressed" Value="True"/>
                  <Trigger Property="IsEnabled" Value="False"/>
                </ControlTemplate.Triggers>
              </ControlTemplate>
            </Setter.Value>


希望这两种样式中的一种适合您。

不确定,但我刚刚意识到它与Textblock样式不完全一样,所以我不确定会发生什么。字体大小相同,阴影的强度似乎是混合预览的两倍。我只将此问题连接到TextBlock,因为删除该样式会使按钮样式正常工作。确实,作为按钮内容的字符串将自动包装到TextBlock中,但“隐式”TextBlock不会受到无键样式资源的影响。这会是一个错误吗?我正在上传一个混合项目来演示这个问题。不确定,但我刚刚意识到它与Textblock风格不完全一样,所以我不确定会发生什么。字体大小相同,阴影的强度似乎是混合预览的两倍。我只将此问题连接到TextBlock,因为删除该样式会使按钮样式正常工作。确实,作为按钮内容的字符串将自动包装到TextBlock中,但“隐式”TextBlock不会受到无键样式资源的影响。这会是一个错误吗?我正在上传一个混合项目来演示这个问题