Vahid
Vahid

Reputation: 5444

ToggleButtons in WPF

I have two ToggleButtons. I want only one of them to be in the Pressed state at any time. So let's say Model ToggleButton is pressed:

I want to achieve the below concepts:

  1. If I press Drawing ToggleButton, the Model ToggleButton will be unpressed and Drawing ToggleButton will go to pressed state.
  2. If press the Model Button which is in the pressed state nothing will happen.

By the way here is all I have done so far :(

<ToggleButton Width="50" Height="23"  Margin="0 0 0 0">Model</ToggleButton>
<ToggleButton Width="50" Height="23"  Margin="0 0 7 0">Drawing</ToggleButton>

Update:

Using the provided link under the comments, I came up with this:

<RadioButton Style="{StaticResource {x:Type ToggleButton}}" Content="Model" IsChecked="True" />
<RadioButton Style="{StaticResource {x:Type ToggleButton}}" Content="Drawing" />

Now the above code gives me two buttons, but how can I style these? I know how to style. But I don't know what to style here? I mean I have already filled the style property here how can I style the ToggleButton itself?

enter image description here

Upvotes: 4

Views: 710

Answers (2)

Rohit Vats
Rohit Vats

Reputation: 81253

Since RadioButton inherits from ToggleButton, you can set ToggleButton style to it and use BasedOn to inherit default style of ToggleButton like this:

<RadioButton GroupName="Test" Width="50" Height="23" Margin="0 0 7 0"
                Content="Model">
    <RadioButton.Style>
        <Style TargetType="ToggleButton"
               BasedOn="{StaticResource {x:Type ToggleButton}}">
            <Setter Property="Background" Value="Red"/>
            <!-- Set other properties here-->
        </Style>
    </RadioButton.Style>
</RadioButton>

Upvotes: 3

Rachel
Rachel

Reputation: 132558

According to this answer that DLeh linked in comments, you can do this by styling a RadioButton to use the ToggleButton styles.

<RadioButton Style="{StaticResource {x:Type ToggleButton}}" />

To answer your second question on how to customize the style property for this, you can create another style that inherits from the base ToggleButton style, and use it instead. Like this:

<Style x:Key="CustomToggleButtonStyle" 
       TargetType="{x:Type RadioButton}" 
       BasedOn="{StaticResource {x:Type ToggleButton}}">
    // Custom Style setters here
</Style>

<RadioButton Style="{StaticResource CustomToggleButtonStyle}" />

And of course there's always the option of completely rewriting the entire template yourself from scratch. MSDN has a good examples of a custom ToggleButton Template you could use to start with.

Upvotes: 2

Related Questions