답변:
가장 쉬운 방법은 ListBox의 스타일을 지정하여 ItemTemplate에 ToggleButtons를 사용하는 것입니다.
<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 클릭시 항상 일반 이벤트를 사용할 수 있습니다. 그런 다음 보낸 사람을 다시 확인하십시오. 또는 그와 비슷한 것.
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
s 내부에서 사용할 수 없습니다 .
RibbonToggleButtons에 대해이 작업을 수행했지만 일반 ToggleButtons에도 동일 할 수 있습니다.
여기에서 EnumToBooleanConverter를 사용하여 각 단추에 대한 IsChecked를 "모드"열거 형 값 에 바인딩했습니다. RadioButtons를 열거 형에 바인딩하는 방법은 무엇입니까? (ConverterParameter를 사용하여이 단추에 대한 열거 형 값을 지정합니다. 각 단추에 대해 하나의 열거 형 값이 있어야합니다.)
그런 다음 이미 확인 된 버튼의 선택을 취소하지 않도록 각 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
허용하고 UnChecking도 허용합니다.
몇 가지 답변을 가져 와서 추가 코드를 추가했습니다. 이제 하나의 토글 버튼처럼 작동하는 다양한 토글 버튼 그룹을 가질 수 있습니다.
<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}}">