1

このコードのどこが間違っているのか。関連する RadioButton が選択されたときに TextBox を有効にし、別のラジオ ボタンが選択されたときに Enabled=False にしたい。ProxyMode 依存関係プロパティを作成し、プロキシが選択されているかどうかに基づいてブール値を取得するように getter を変更しました。うまくいかないようです...何かアイデアはありますか?

// Proxy Host Name
public string Proxy
{
  get { return (string)GetValue(ProxyProperty); }
  set { SetValue(ProxyProperty, value); }
}

public static readonly DependencyProperty ProxyProperty =
       DependencyProperty.Register("Proxy", typeof(string), typeof(ConfigWindowViewModel), new UIPropertyMetadata("[e.g. proxy.mycompany.com]"));

public bool ProxyMode
{
  get { return Proxy == "Proxy"; }
  set { SetValue(ProxyModeProperty, value); }
}

public static readonly DependencyProperty ProxyModeProperty =
       DependencyProperty.Register("ProxyMode", typeof(bool), typeof(ConfigWindowViewModel));

そしてXAML

<StackPanel Grid.Column="0" Margin="2">
  <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
    <RadioButton IsChecked="{Binding Path=Mode, Converter={StaticResource enumBooleanConverter}, ConverterParameter=Proxy}"
                  VerticalAlignment="Center"
                  Padding="2,0,10,0">Proxy
    </RadioButton>
    <TextBox Text="{Binding Path=Proxy}" 
             IsEnabled="{Binding Path=ProxyMode}"
             Width="Auto"
             Name="ProxyHostTextBox"
             VerticalAlignment="Center"
             MinWidth="150" 
    />
  </StackPanel>
  <RadioButton IsChecked="{Binding Path=Mode, Converter={StaticResource enumBooleanConverter}, ConverterParameter=Direct}">Direct</RadioButton>
</StackPanel>
4

3 に答える 3

4

プロキシ RadioButton がチェックされているかどうかに基づいてテキスト ボックスを有効または無効にする最も簡単な方法は、TextBox の IsEnabled プロパティをプロキシ RadioButton の IsChecked プロパティに直接バインドすることです。プロキシ RadioButton の名前が「proxy」であると仮定します。

<TextBox Text="{Binding Path=Proxy}" IsEnabled="{Binding ElementName=proxy, Path=IsChecked}"/>

RadioButton コントロールをリンクして、一度に 1 つだけを選択できるようにする場合は、両方の GroupName プロパティを何かに設定する必要があります (リンクされたすべての RadioButton コントロールで同じにする必要があります)。

他にご不明な点がございましたら、お問い合わせください。

于 2010-09-10T02:01:40.260 に答える
2

この質問の2番目のバージョンと同様に:

<RadioButton x:Name="RadioButton2" />
<TextBox IsEnabled="{Binding IsChecked, ElementName=RadioButton2}" />
于 2010-09-10T02:02:34.673 に答える
0

これを行うためのより良い方法を思いついたと思います-したがって、この質問はおそらく尋ねるのに適したものではありません-依存関係プロパティのない次の質問は問題ないようです

        <StackPanel Grid.Column="0" Margin="2">
            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                <RadioButton IsChecked="{Binding Path=Mode, Converter={StaticResource enumBooleanConverter}, ConverterParameter=Proxy}" VerticalAlignment="Center" Padding="2,0,10,0" Name="ProxyModeRadioButton">Proxy</RadioButton>
                <TextBox Text="{Binding Path=Proxy}" 
                         IsEnabled="{Binding ElementName=ProxyModeRadioButton, Path=IsChecked}"
                         Width="Auto" Name="ProxyHostTextBox" VerticalAlignment="Center" MinWidth="150" 
                />

            </StackPanel>   
            <RadioButton IsChecked="{Binding Path=Mode, Converter={StaticResource enumBooleanConverter}, ConverterParameter=Direct}">Direct</RadioButton>
        </StackPanel>
于 2010-09-10T02:02:00.383 に答える