Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# WPF XAML:带IsDefault=";“真的”;_C#_Wpf_Xaml - Fatal编程技术网

C# WPF XAML:带IsDefault=";“真的”;

C# WPF XAML:带IsDefault=";“真的”;,c#,wpf,xaml,C#,Wpf,Xaml,当我尝试在具有IsDefault=“True”属性的按钮上输入边框笔刷颜色时,边框将不会更改,并保留IsDefault属性的蓝色边框 如果删除IsDefault=“True”,则边框笔刷颜色适用 有没有一种方法可以将按钮设为默认值并为其提供自定义边框颜色?方法1:最好的方法是在窗口中定义一种样式。参考资料将该样式应用于所有按钮: <Window.Resources> <Style TargetType="{x:Type Button}"> <

当我尝试在具有IsDefault=“True”属性的按钮上输入边框笔刷颜色时,边框将不会更改,并保留IsDefault属性的蓝色边框

如果删除IsDefault=“True”,则边框笔刷颜色适用


有没有一种方法可以将按钮设为默认值并为其提供自定义边框颜色?

方法1:最好的方法是在
窗口中定义一种样式。参考资料
将该样式应用于所有按钮:

<Window.Resources>
    <Style TargetType="{x:Type Button}">
        <Setter Property="BorderBrush" Value="Blue" />
    </Style>
</Window.Resources>

问题在于按钮
控制模板
,它在某些情况下会改变按钮的外观

查看默认按钮的样式/控件模板:

<Style x:Key="ButtonFocusVisual">
    <Setter Property="Control.Template">
        <Setter.Value>
            <ControlTemplate>
                <Rectangle Margin="2" SnapsToDevicePixels="true" Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" StrokeThickness="1" StrokeDashArray="1 2"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<LinearGradientBrush x:Key="ButtonNormalBackground" EndPoint="0,1" StartPoint="0,0">
    <GradientStop Color="#F3F3F3" Offset="0"/>
    <GradientStop Color="#EBEBEB" Offset="0.5"/>
    <GradientStop Color="#DDDDDD" Offset="0.5"/>
    <GradientStop Color="#CDCDCD" Offset="1"/>
</LinearGradientBrush>
<SolidColorBrush x:Key="ButtonNormalBorder" Color="#FF707070"/>
<Style x:Key="ButtonStyle1" TargetType="{x:Type Button}">
    <Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
    <Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
    <Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
    <Setter Property="BorderThickness" Value="1"/>
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="VerticalContentAlignment" Value="Center"/>
    <Setter Property="Padding" Value="1"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderMouseOver="{TemplateBinding IsMouseOver}" RenderPressed="{TemplateBinding IsPressed}" RenderDefaulted="{TemplateBinding IsDefaulted}" SnapsToDevicePixels="true">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Themes:ButtonChrome>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsKeyboardFocused" Value="true">
                        <Setter Property="RenderDefaulted" TargetName="Chrome" Value="true"/>
                    </Trigger>
                    <Trigger Property="ToggleButton.IsChecked" Value="true">
                        <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Foreground" Value="#ADADAD"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

相关部分可能是

<Themes:ButtonChrome x:Name="Chrome"
    ...
    RenderMouseOver="{TemplateBinding IsMouseOver}"
    RenderPressed="{TemplateBinding IsPressed}"
    RenderDefaulted="{TemplateBinding IsDefaulted}"
    ... >

和控件模板触发器

<Trigger Property="IsKeyboardFocused" Value="true">
    <Setter Property="RenderDefaulted" TargetName="Chrome" Value="true"/>
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="true">
    <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
</Trigger>


因此,对于您的特定情况,如果您确实只希望为
IsDefault
设置不同的边框,但希望更改焦点、鼠标悬停和其他状态的所有边框,那么您可以通过在
主题:ButtonChrome
中设置
RenderDefaulted=“False”
(而不是
RenderDefaulted=)来修改控件模板{TemplateBinding isdefault}“
).

如果要将样式应用于所有按钮,则需要删除方法1中的
x:Key
。始终需要TargetType!No luck:/仍保留默认蓝色colour@NiallMitch14是的,这就是它要做的。你有按钮的默认颜色-然后你想要不同的应用样式和更改Va我知道在你的例子中它仍然是蓝色的。但是我把颜色改成了绿色,它仍然是蓝色。你的按钮不能是按钮类型,把x:type:button改成x:type ButtonChrome或者你正在使用的任何类型
<Themes:ButtonChrome x:Name="Chrome"
    ...
    RenderMouseOver="{TemplateBinding IsMouseOver}"
    RenderPressed="{TemplateBinding IsPressed}"
    RenderDefaulted="{TemplateBinding IsDefaulted}"
    ... >
<Trigger Property="IsKeyboardFocused" Value="true">
    <Setter Property="RenderDefaulted" TargetName="Chrome" Value="true"/>
</Trigger>
<Trigger Property="ToggleButton.IsChecked" Value="true">
    <Setter Property="RenderPressed" TargetName="Chrome" Value="true"/>
</Trigger>