본문 바로가기
C#/C# WPF

Button 비활성화 상태에서 클릭 처리

by doublerabbits 2022. 8. 20.

버튼이 IsEnabled="False" 상태일때도 버튼 클릭 처리가 필요한 경우 트릭을 이용해서 아래와 같이 처리한다.

 

 

  • 기존 버튼을 상속 받아 새로운 버튼을 만든다.
  • IsDefault 속성이 false 인경우 비활성화 버튼처럼 표시하도록 한다.
<Style x:Key="RoundButton_White" TargetType="{x:Type Button}">
    <Setter Property="FocusVisualStyle" Value="{StaticResource FocusVisual}"/>
    <Setter Property="Background" Value="#FFFFFFFF"/>
    <Setter Property="BorderBrush" Value="#FF707070"/>
    <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
    <Setter Property="FontWeight" Value="Heavy"/>
    <Setter Property="BorderThickness" Value="2"/>
    <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}">
                <Border x:Name="border" CornerRadius="5" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
                    <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsDefaulted" Value="true">
                        <Setter Property="BorderBrush" TargetName="border" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Background" TargetName="border" Value="#FFCCCCCC"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="#FF3C7FB1"/>
                        <Setter Property="BorderThickness" TargetName="border" Value="3"/>
                    </Trigger>
                    <Trigger Property="IsPressed" Value="true">
                        <Setter Property="Background" TargetName="border" Value="#FFFFFFFF"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="#FF2C628B"/>
                        <Setter Property="BorderThickness" TargetName="border" Value="4"/>
                    </Trigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
                        <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style x:Key="RoundButton_Default" TargetType="{x:Type Button}" BasedOn="{StaticResource RoundButton_White}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="border" CornerRadius="5" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="true">
                    <ContentPresenter x:Name="contentPresenter" Focusable="False" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsDefault" Value="false">
                        <Setter Property="Background" TargetName="border" Value="#FFF4F4F4"/>
                        <Setter Property="BorderBrush" TargetName="border" Value="#FFADB2B5"/>
                        <Setter Property="TextElement.Foreground" TargetName="contentPresenter" Value="#FF838383"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

 

 

  • 버튼을 사용하는 코드에서 IsEnabled 속성 대신에 IsDefault 를 사용한다.
<Button Content="Start" Command="{Binding StartCommand}" Height="50" Style="{StaticResource RoundButton_IsDefault}" IsDefault="False"/>

 

 

 

 

 

 

'C# > C# WPF' 카테고리의 다른 글

Style 사용  (0) 2022.09.17
PrismMVVMLibrary  (0) 2022.09.12
Progress with Async/Await  (0) 2022.08.15
View - ViewModel 바인딩 이름  (0) 2022.08.15
Prism Template Pack  (0) 2022.08.15