用后面的代码更改按钮内容

时间:2014-07-02 12:02:19

标签: wpf button

这是我的代码:

Button obj = sender as Button;
        obj.Content = "fgfgfgfghhhhhhhhhhhhhpetko";
        obj.Foreground = Brushes.White;
        obj.Height = 20;

它位于MouseEntered事件中。当我将鼠标移到按钮上时,按钮会改变其高度,但它不会改变其内容。案文保持不变。为什么会这样?

这是按钮样式:

<Style x:Key="RoundCorner" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid x:Name="grid" >
                    <Border x:Name="border" CornerRadius="8">
                        <Border.Background>
                            SlateBlue
                        </Border.Background>
                    </Border>
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" >
                        <ContentPresenter.Content>
                            <StackPanel Orientation="Horizontal">
                                <Image Source="/Resources/test.png"></Image>
                                <TextBlock HorizontalAlignment="Right">
                                    <TextBlock.Name>
                                        petko
                                    </TextBlock.Name>
                                </TextBlock>
                            </StackPanel>
                        </ContentPresenter.Content>
                    </ContentPresenter>

                </Grid>

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

以下是我如何使用它:

<Button  MouseEnter="MouseEntered" Style="{StaticResource RoundCorner}" Name="btnHelp" Command="NavigationCommands.GoToPage" CommandParameter="ViewModel/MyPage.xaml" CommandTarget="{Binding ElementName=frmContent}" ></Button>

3 个答案:

答案 0 :(得分:2)

当我使用您的模板时,为该按钮设置任何内容对我来说都不起作用(即使在XAML文件中硬编码)。我已经修改了您的模板,但没有覆盖ContentContainer.Content内的ControlTemplate,它现在似乎正常工作,并且在鼠标输入事件中更新。

<Style x:Key="RoundCorner" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid x:Name="grid" >
                        <Border x:Name="border" CornerRadius="8">
                            <Border.Background>
                                SlateBlue
                            </Border.Background>
                        </Border>
                        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
                            <Image Source="/Resources/test.png"></Image>
                            <ContentPresenter />
                        </StackPanel>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

如果这可以解决您的问题,请告诉我。

答案 1 :(得分:1)

您已对模板进行了硬编码,您必须使用模板绑定来更新此模板。

<Style x:Key="RoundCorner" TargetType="{x:Type Button}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Grid x:Name="grid" >
                    <Border x:Name="border" CornerRadius="8">
                        <Border.Background>
                            SlateBlue
                        </Border.Background>
                    </Border>
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" >
                        <ContentPresenter.Content>
                            <StackPanel Orientation="Horizontal">
                                <Image Source="/Resources/test.png"></Image>
                                     <TextBlock HorizontalAlignment="Right" Text="{TemplateBinding Content}">
                               </StackPanel>
                        </ContentPresenter.Content>
                    </ContentPresenter>

                </Grid>

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

答案 2 :(得分:0)

问题是您在模板中设置了ContentPresenter.Content。此属性绑定到按钮的实际内容。您应该为按钮设置此内容,而不是模板。