[WPF] 實現(xiàn)根據(jù)ComboBox選項設定其他控件使能(Enable\Disable)狀態(tài)

為建立中文知識庫加塊磚        ——中科大胡不歸

0. 前言

在實現(xiàn)類似設置頁面脱茉,常需要實現(xiàn)某組設置項依賴某個屬性陈惰。比如父項是 ToggleButton,打開開關纤掸,可以設定子項的參數(shù)。關閉開關浑塞,子項被 Disable 而無法編輯借跪。這種情況,簡單的 Binding 就可以實現(xiàn)酌壕。

還有種更復雜的情況掏愁,父項是 ComboBox歇由,有多個選項,其中一個選項對應使能開關果港。這種情況我們需要用到 Converter沦泌。

學習WPF: 第五個月。

1. View代碼

<UserControl x:Class="HelloMvvmLight.View.MainDrawer"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:hc="https://handyorg.github.io/handycontrol"
             xmlns:converter="clr-namespace:HelloMvvmLight.Converter"
             mc:Ignorable="d"
             x:Name="MyDrawer"
             DataContext="{Binding Main, Source={StaticResource Locator}}"
             d:DesignWidth="400">
    <Grid Margin="5" Background="White">
        <Grid.Resources>
            <Style x:Key="TitleText" TargetType="TextBlock">
                <Setter Property="Foreground" Value="Gray" />
                <Setter Property="Padding" Value="5,0,0,0" />
                <Setter Property="VerticalAlignment" Value="Center"></Setter>
                <Setter Property="FontFamily" Value="微軟雅黑,SimSun" />
            </Style>
            
            <converter:LangInfo2BoolConverter x:Key="Lang2Bool"/>
        </Grid.Resources>
        
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        
        <DockPanel Grid.Row="4" Margin="0,0,0,15">
            <TextBlock DockPanel.Dock="Left" Style="{StaticResource TitleText}" Text="下拉演示" Width="60"></TextBlock>
            <ComboBox x:Name="ComboLang" ItemsSource="{Binding LangList}" SelectedItem="{Binding Path=CurrentLang}" 
                      DisplayMemberPath="Name" />
        </DockPanel>
        
        <DockPanel Grid.Row="5" Margin="0,0,0,15">
            <TextBlock DockPanel.Dock="Left" Style="{StaticResource TitleText}" Text="數(shù)字演示" Width="60"></TextBlock>
            <hc:NumericUpDown IsEnabled="{Binding SelectedValue, ElementName=ComboLang, Converter={StaticResource Lang2Bool}}" 
                              Margin="0,0,0,0" Style="{StaticResource NumericUpDownPlus}"/>
        </DockPanel>
    </Grid>
</UserControl>

注意:需要在resource中聲明我們要用的Converter辛掠。

<Grid.Resources>
            <converter:LangInfo2BoolConverter x:Key="Lang2Bool"/>
</Grid.Resources>

2. Converter代碼

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using HelloMvvmLight.Model;

namespace HelloMvvmLight.Converter
{
    public class LangInfo2BoolConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (targetType == typeof(Boolean)) {
                if (null != value && value is LangInfo item)
                {
                    switch (item.Value)
                    {
                        case "default":
                        {
                            return false;
                        }

                        default:
                        {
                            return true;
                        }
                    }
                }

                return true;
            }
            throw new InvalidOperationException("Converter can only convert to value of type Boolean.");
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

3. 效果演示

參考文章:

  1. Binding to a WPF ToggleButton's IsChecked state
  2. How do you bind the TextWrapping property of a TextBox to the IsChecked value of a MenuItem?
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末谢谦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萝衩,更是在濱河造成了極大的恐慌回挽,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猩谊,死亡現(xiàn)場離奇詭異千劈,居然都是意外死亡,警方通過查閱死者的電腦和手機牌捷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門墙牌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宜鸯,你說我怎么就攤上這事憔古≌诹” “怎么了淋袖?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锯梁。 經(jīng)常有香客問我即碗,道長,這世上最難降的妖魔是什么陌凳? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任剥懒,我火速辦了婚禮,結果婚禮上合敦,老公的妹妹穿的比我還像新娘初橘。我一直安慰自己,他們只是感情好充岛,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布保檐。 她就那樣靜靜地躺著,像睡著了一般崔梗。 火紅的嫁衣襯著肌膚如雪夜只。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天蒜魄,我揣著相機與錄音扔亥,去河邊找鬼场躯。 笑死,一個胖子當著我的面吹牛旅挤,可吹牛的內容都是我干的踢关。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼粘茄,長吁一口氣:“原來是場噩夢啊……” “哼耘成!你這毒婦竟也來了?” 一聲冷哼從身側響起驹闰,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤瘪菌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后嘹朗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體师妙,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年屹培,在試婚紗的時候發(fā)現(xiàn)自己被綠了默穴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡褪秀,死狀恐怖蓄诽,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情媒吗,我是刑警寧澤仑氛,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站闸英,受9級特大地震影響锯岖,放射性物質發(fā)生泄漏。R本人自食惡果不足惜甫何,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一出吹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辙喂,春花似錦捶牢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至芍锦,卻和暖如春竹勉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背娄琉。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工次乓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吓歇,地道東北人。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓票腰,卻偏偏與公主長得像城看,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子杏慰,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351