如何在运行时禁用鼠标悬停或单击时WPF按钮突出显示?

yx2lnoni  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(163)

我在C#中编写了以下代码来创建一个作为StackPanel子级的按钮:
'按钮myButton =新按钮();//所有按钮内容(背景、文本...)。
添加(我的按钮);'
但是,就像每个按钮一样,它在每次鼠标移过或者我点击它的时候都会高亮显示。有没有什么方法可以在一个简单的代码中改变它(我还是C#新手),可以去除高亮显示。
我不知道如何做到这一点。我没有看到任何解释这一点的东西,我能找到的唯一代码是在XAML,我不理解他们,所以不能把他们翻译成C#。

vyswwuz2

vyswwuz21#

我看了几个答案,没有看到任何我喜欢的。
wpf控件是看不见的,这意味着它们有固定的行为,但没有特定的外观。你可以将wpf控件重新模板化为几乎任何你可以在xaml中描述的东西。许多wpf控件都有相当复杂的模板。
这里有一种方法来模板化一个按钮。
我已经把这个样式放在我窗口的资源里了。通常这样的样式在资源字典里,而资源字典合并在app.xaml里。

<Window.Resources>
    <Style x:Key="NoMouseOverButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="OverridesDefaultStyle" Value="true" />
            <Setter Property="BorderBrush" Value="LightGray"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name="Border"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}"
                            Background="{TemplateBinding Background}"   >
                        <ContentPresenter Margin="2"
                            HorizontalAlignment="Center"
                            VerticalAlignment="Center"
                            RecognizesAccessKey="True" />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    </Window.Resources> 
    <Grid>
        <Button Style="{StaticResource NoMouseOverButtonStyle}"
                Content="This is my Button"
                Click="Button_Click"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                />
    </Grid>
</Window>

按钮将样式作为资源引用。该样式设置了一些默认值,因此按钮有一个边框,您可以看到,但覆盖。
contentpresenter很关键,因为无论你为按钮做什么,它都会出现。
如果我在一个按钮上设置了一个实际的值,那么它将覆盖样式。

<Button Style="{StaticResource NoMouseOverButtonStyle}"
                Content="This is my Button"
                Click="Button_Click"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                BorderBrush="Red"
                />

在按钮上显示红色边框。
浅灰色边框比按钮的默认边框简单。
你可以复制这个。也许这会是一个有趣的学习练习。
查找msdn上的按钮模板。
谷歌:"wpf按钮模板msdn"
你看,打起精神来,这很复杂。
看到按钮边框笔刷在模板中硬编码了吗?
更改上面的样式,使其具有相同的效果。
线索:

<Setter.Value>

相关问题