2017-11-29 10 views
0

IsDefault = "True"속성이있는 단추에 테두리 브러시 색상을 입력하려고하면 테두리가 변경되지 않고 테두리가 파란색 테두리로 유지됩니다 IsDefault 속성WPF XAML : IsDefault = "True"인 단추의 테두리 브러쉬

IsDefault = "True"를 제거하면 테두리 브러시 색상이 적용됩니다.

단추를 기본값으로 사용하고 테두리 색을 사용자 지정하는 방법이 있습니까?

답변

0

방법 항목 :

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

방법 2 : 또 다른 방법은에 x:Key="yourButtonStyle"을 추가하는 것입니다 단지 모든 버튼에 해당 스타일을 적용하여 Window.Resources의 스타일을 정의한다이 작업을 수행하는 가장 좋은 방법은

<Window.Resources> 
    <Style x:Key="yourButtonStyle" TargetType="{x:Type Button}"> 
     <Setter Property="BorderBrush" Value="Blue" /> 
    </Style> 
</Window.Resources> 
: Style 요소와 당신이 Style 속성에 원하는 버튼에 할당
<Button Style="{StaticResource yourButtonStyle}"/> 
+0

모든 버튼에 스타일을 적용하려면 방법 1에서'x : Key '를 제거해야합니다. TargetType은 항상 필요합니다! –

+0

@ Felix D. 정정 해 주셔서 고쳐주었습니다. - 고쳐주었습니다. – JohnChris

+0

행운을 빕니다./여전히 기본 파란색 인 채로 남아 있습니다. – NiallMitch14

1

문제는 단추 모양이 경우에 따라 변경되는 ControlTemplate입니다.

는 기본 버튼의 스타일/컨트롤 템플릿에서보세요 :

<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 그러나 포커스, 마우스 오버 및 기타 상태에 맞게 모든 테두리를 변경하려면 RenderDefaulted="{TemplateBinding IsDefaulted}" 대신 Themes:ButtonChromeRenderDefaulted="False"을 설정하여 컨트롤 템플릿을 수정할 수 있습니다.