回答:
最も簡単な方法は、ItemBoxにToggleButtonを使用するようにListBoxをスタイルすることです。
<Style TargetType="{x:Type ListBox}">
<Setter Property="ListBox.ItemTemplate">
<Setter.Value>
<DataTemplate>
<ToggleButton Content="{Binding}"
IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}"
/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
次に、ListBoxのSelectionModeプロパティを使用して、SingleSelectとMultiSelectを処理できます。
これは私の意見では最も簡単な方法です。
<RadioButton Style="{StaticResource {x:Type ToggleButton}}" />
楽しい!-プリックソー
Grid
)内のすべてのRadioButtonに適用する必要がある場合は、を使用します<Grid.Resources> <Style TargetType="RadioButton" BasedOn="{StaticResource {x:Type ToggleButton}}" /> </Grid.Resources>
。
<Style BasedOn="{StaticResource {x:Type ToggleButton}}" x:Key="Blubb" TargetType="RadioButton"><Setter Property="Background" Value="Yellow" /></Style>
<RadioButton Content="Point" >
<RadioButton.Template>
<ControlTemplate>
<ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
</ControlTemplate>
</RadioButton.Template>
</RadioButton>
それは私のために働きます、楽しんでください!
VisualTreeHelperの助けを借りて、groupcontrol(Grid、WrapPanel、...)のすべてのToggleButton.IsCheckedをfalseに設定するToggleButtonのClickで常にジェネリックイベントを使用できます。その後、送信者を再確認してください。またはそのようなものの何か。
private void ToggleButton_Click(object sender, RoutedEventArgs e)
{
int childAmount = VisualTreeHelper.GetChildrenCount((sender as ToggleButton).Parent);
ToggleButton tb;
for (int i = 0; i < childAmount; i++)
{
tb = null;
tb = VisualTreeHelper.GetChild((sender as ToggleButton).Parent, i) as ToggleButton;
if (tb != null)
tb.IsChecked = false;
}
(sender as ToggleButton).IsChecked = true;
}
ラジオボタンを含むグリッドを配置し、raduiobuttonsのテンプレートのようなボタンを作成できます。プログラムでボタンを切り替えたくない場合は、チェックを外すだけでなく
あなたも試すことができます System.Windows.Controls.Primitives.ToggleButton
<ToggleButton Name="btnTest" VerticalAlignment="Top">Test</ToggleButton>
次に、IsChecked
プロパティに対してコードを記述して、ラジオボタン効果を模倣します
private void btnTest_Checked(object sender, RoutedEventArgs e)
{
btn2.IsChecked = false;
btn3.IsChecked = false;
}
ListBoxItem
。
RibbonToggleButtonsでこれを行いましたが、通常のToggleButtonsでも同じかもしれません。
ここからEnumToBooleanConverterを使用して、各ボタンのIsCheckedを「モード」列挙値にバインドしました。RadioButtonを列挙型にバインドする方法は?(ConverterParameterを使用して、このボタンの列挙値を指定します。ボタンごとに1つの列挙値が必要です)
次に、既にチェックされているボタンがチェック解除されないようにするには、各RibbonToggleButtonsのClickイベントのコードビハインドにこれを配置します。
private void PreventUncheckRibbonToggleButtonOnClick ( object sender, RoutedEventArgs e ) {
// Prevent unchecking a checked toggle button - so that one always remains checked
// Cancel the click if you hit an already-checked button
var button = (RibbonToggleButton)sender;
if( button.IsChecked != null ) { // Not sure why checked can be null but that's fine, ignore it
bool notChecked = ( ! (bool)button.IsChecked );
if( notChecked ){ // I guess this means the click would uncheck it
button.IsChecked = true;
}
}
}
ジュリアンや私のような人々を助けるため(2分前...)。RadioButton
このようにして派生できます。
class RadioToggleButton : RadioButton
{
protected override void OnToggle()
{
if (IsChecked == true) IsChecked = IsThreeState ? (bool?)null : (bool?)false;
else IsChecked = IsChecked.HasValue;
}
}
その後、Uday Kiranが提案するように使用できます...
<Window x:Class="Sample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Sample"
Title="MainWindow" Height="600" Width="600">
<StackPanel>
<local:RadioToggleButton Content="Button" Style="{StaticResource {x:Type ToggleButton}}" />
</StackPanel>
</Window>
この方法は、一つだけを許可ToggleButton
するChecked
時に、それはまた、オフにすることができます。
私は答えのいくつかを取り、いくつかの追加コードを追加しました。これで、1つのトグルボタンのように機能するトグルボタンのさまざまなグループを持つことができます。
<UserControl.Resources>
<Style x:Key="GroupToggleStyle" TargetType="ToggleButton">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding GroupName, RelativeSource={RelativeSource Self}}" Value="Group1"/>
<Condition Binding="{Binding BooleanProperty}" Value="true"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="IsChecked" Value="true"/>
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
また、トグルボタンのように見えるラジオボタンのさまざまなグループ:
<Radio Button GroupName="Group1" Style="{StaticResource {x:Type ToggleButton}}">
<Radio Button GroupName="Group1" Style="{StaticResource {x:Type ToggleButton}}">
<Radio Button GroupName="Group2" Style="{StaticResource {x:Type ToggleButton}}">
<Radio Button GroupName="Group3" Style="{StaticResource {x:Type ToggleButton}}">