我创建了包含名为ButtonState(Checked,Disabled或Available)的属性的用户控件(切换按钮)。 Control具有内置的鼠标点击事件,它将状态从可用状态转换为可用状态,或者从按下状态转换为可用状态(如果禁用则不能点击)。WPF - 双向绑定
我的目的是创建按钮的“树”,这样的事情:
OPTION 1 OPTION 2
SUBOPTION1 SUBOPTION1 SUBOPTION1 SUBOPTION1
.... .....
所以,如果我点击按钮“选项1”(它改变状态控制范围之内按下)我想按钮“选项2“进入状态DISABLED。如果我再次点击OPTION 1,它将从PRESSED转换为AVAILABLE,OPTION2转为AVAILABLE TOO。如果我点击OPTION2,就应该运行相同的程序(当然类似)。简而言之:只有一个按钮可以有PRESSED状态,如果有一个这样的状态,则必须禁用另一个按钮。如果有一个 - 另一个必须可用。
我创建转换器(InverseButtonStateConverter)BUTTONSTATE - > BUTTONSTATE
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
switch (((Controls.ButtonState)value))
{
case Controls.ButtonState.Available: return Controls.ButtonState.Available;
case Controls.ButtonState.Pressed: return Controls.ButtonState.Disable;
case Controls.ButtonState.Disable: return Controls.ButtonState.Available;
default: return Controls.ButtonState.Available;
}
}
使用XAML:
<Controls:ToggleRectangleButton HorizontalAlignment="Center" VerticalAlignment="Center" Height="109" Width="210" ButtonText2="Bilety jednorazowe" TextFontSize="25" Grid.Column="0" x:Name="btSingleTicket" Click="btSingleTicket_Click" ButtonState="{Binding ElementName=btTimeTicket, Path=ButtonState, Converter={StaticResource InverseButtonStateConverter}}"/>
<Controls:ToggleRectangleButton HorizontalAlignment="Center" VerticalAlignment="Center" Height="109" Width="210" ButtonText2="Bilety czasowe" TextFontSize="25" Grid.Column="3" x:Name="btTimeTicket" Click="btTimeTicket_Click" ButtonState="{Binding ElementName=btSingleTicket, Path=ButtonState, Converter={StaticResource InverseButtonStateConverter}}"/>
当我运行这段代码,当我点击一个按钮,它的工作好。如果我通过点击第二个按钮来打断它(它不会按我的意愿工作),首先按钮能够纠正工作消失。
我试图改变绑定模式,但我不知道如何做到这一点。一些帮助?
使用ViewModel的效果更好 – 2014-09-12 15:18:31