Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.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
C# 在触发时更改XAML中的按钮内容_C#_Wpf_Xaml_Controltemplate - Fatal编程技术网

C# 在触发时更改XAML中的按钮内容

C# 在触发时更改XAML中的按钮内容,c#,wpf,xaml,controltemplate,C#,Wpf,Xaml,Controltemplate,我正在尝试制作一个模板,该模板将更改按钮的背景以及文本块的颜色。我在我的模板中尝试了以下XAML,但它只会使鼠标上方的按钮消失。有没有办法更改触发器上按钮内容的属性 <ControlTemplate TargetType="{x:Type Button}"> <Border x:Name="Border" Corn

我正在尝试制作一个模板,该模板将更改
按钮的背景以及
文本块的颜色。我在我的模板中尝试了以下XAML,但它只会使鼠标上方的按钮消失。有没有办法更改触发器上按钮内容的属性

                <ControlTemplate TargetType="{x:Type Button}">
                <Border 
                        x:Name="Border"  
                        CornerRadius="0" 
                        BorderThickness="0"
                        Background="{x:Null}"
                        BorderBrush="#FF404040" />
                    <ControlTemplate.Triggers>
                       <Trigger Property="IsMouseOver" Value="true">
                          <Setter TargetName="Border" Property="Background" Value="White" />
                            <Setter Property="ContentTemplate">
                                <Setter.Value>
                                    <DataTemplate DataType="TextBlock">
                                        <TextBlock Foreground="Blue" />
                                    </DataTemplate>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

                <ControlTemplate TargetType="{x:Type Button}">
                <Border 
                        x:Name="Border"  
                        CornerRadius="0" 
                        BorderThickness="0"
                        Background="{x:Null}"
                        BorderBrush="#FF404040" />
                    <ControlTemplate.Triggers>
                       <Trigger Property="IsMouseOver" Value="true">
                          <Setter TargetName="Border" Property="Background" Value="White" />
                            <Setter Property="ContentTemplate">
                                <Setter.Value>
                                    <DataTemplate DataType="TextBlock">
                                        <TextBlock Foreground="Blue" />
                                    </DataTemplate>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

样式:

                <ControlTemplate TargetType="{x:Type Button}">
                <Border 
                        x:Name="Border"  
                        CornerRadius="0" 
                        BorderThickness="0"
                        Background="{x:Null}"
                        BorderBrush="#FF404040" />
                    <ControlTemplate.Triggers>
                       <Trigger Property="IsMouseOver" Value="true">
                          <Setter TargetName="Border" Property="Background" Value="White" />
                            <Setter Property="ContentTemplate">
                                <Setter.Value>
                                    <DataTemplate DataType="TextBlock">
                                        <TextBlock Foreground="Blue" />
                                    </DataTemplate>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
<Style TargetType="{x:Type Button}" x:Key="MyButton">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="Border"
                        CornerRadius="0"
                        BorderThickness="{TemplateBinding BorderThickness}"
                        Background="{TemplateBinding Background}"
                        TextBlock.Foreground="{TemplateBinding Foreground}"
                        BorderBrush="#FF404040">
                    <ContentPresenter Margin="2"
                                      HorizontalAlignment="Center"
                                      VerticalAlignment="Center"
                                      RecognizesAccessKey="True" />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter TargetName="Border" Property="Background" Value="White" />
                        <Setter TargetName="Border" Property="TextBlock.Foreground" Value="Blue" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

用法:

                <ControlTemplate TargetType="{x:Type Button}">
                <Border 
                        x:Name="Border"  
                        CornerRadius="0" 
                        BorderThickness="0"
                        Background="{x:Null}"
                        BorderBrush="#FF404040" />
                    <ControlTemplate.Triggers>
                       <Trigger Property="IsMouseOver" Value="true">
                          <Setter TargetName="Border" Property="Background" Value="White" />
                            <Setter Property="ContentTemplate">
                                <Setter.Value>
                                    <DataTemplate DataType="TextBlock">
                                        <TextBlock Foreground="Blue" />
                                    </DataTemplate>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
<Button Width="100" Height="50" Content="Lalala" Style="{StaticResource MyButton}" Background="Brown" Foreground="Green" BorderThickness="2"></Button>

  • 您缺少负责可视化
    按钮的
    内容的
    ContentPresenter
  • 要设置前景,可以使用
    TextBlock.foreground
    attached属性
  • 一直对我很有用:)

  • 谢谢正是我需要的=)次要问题,如果我按钮的内容是一个StackPanel,里面有一个TextBlock,我会使用StackPanel.TextBlock.Foreground而不是TextBlock.Foreground吗?不幸的是,
    TextBlock.Foreground
    在更复杂的场景中不起作用(只是默认情况)
    StackPanel.TextBlock.Foreground
    也不起作用。当您有更复杂的内容时,我认为样式应该在上下文本身上完成,而不是在模板上完成。