91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CustomControl之內置命令

發布時間:2020-07-10 20:48:03 來源:網絡 閱讀:746 作者:twoxzi 欄目:編程語言

    在打造CustomControl時, 我們可能會遇到這樣的情況: 希望模板中的Button能執行Control中某些特定的邏輯.

    對于這種情況,有兩種解決方法:TemplatePartAttribute和Command.

    TemplatePartAttribute就是對UI中的元素命名, 然后在后臺尋找此元素進行相應的操作. 很可惜, 這會使得UI與邏輯耦合, 這與CustomControl的初衷相悖.當外部程序改寫Template時,很有可能失去作用.

    而Command則十分可靠, 因為它能使UI和邏輯分離. 外部改寫UI后, 只需對相應的元素重新綁定內置的Command就可以正常地工作. 下面為大家如何內置Command和如何進行綁定.

    

    在下面的后臺代碼中, 對TestCommand進行聲明和初始化. 然后在靜態構造函數中通過CommandManager.RegisterClassCommandBinding(Type,CommandBinding)的方法進行類綁定(當然, 你也可以在構造函數中使用公共的CommandBindings集合,但這并不可靠,因為他人使用此控件時可以隨意修改CommandBindings)

    public class CustomControl1 : Control
    {
        public static readonly RoutedUICommand TestCommand;
        
        static CustomControl1()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
            TestCommand = new RoutedUICommand("Test", "TestCommand", typeof(CustomControl1));
            CommandManager.RegisterClassCommandBinding(typeof(CustomControl1), new CommandBinding(TestCommand, TestExecute, TestCanExecute));
        
        }

        private static void TestCanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            CustomControl1 c = sender as CustomControl1;
            if (c == null) return;
            e.CanExecute = c.CanExecute;
        }

        private static void TestExecute(object sender, ExecutedRoutedEventArgs e)
        {
            CustomControl1 c = sender as CustomControl1;
            if (c == null) return;

            Console.WriteLine("---TestCommand Executed---");
        }


        public bool CanExecute;

        public CustomControl1()
        {
           
        }

    }

    接下來,看看Generic.xaml中的UI代碼:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfCustomControlLibrary1">
    <Style TargetType="{x:Type local:CustomControl1}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Button Command="local:CustomControl1.TestCommand"  Content="abc"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

    在上面代碼的Button中, Command只需要這樣就可以對內置的命令進行綁定.

    以上就是在CustomControl中內置Command的方法.

PS: Button的Content不會自動綁定RoutedUICommand中的Text屬性,可以將Content綁定Command.Text , 如下: Content="{Binding Path=Command.Text,RelativeSource={RelativeSource Self}}"

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临湘市| 仪征市| 缙云县| 衡东县| 北碚区| 长泰县| 卢龙县| 申扎县| 江阴市| 衡东县| 娱乐| 新泰市| 交口县| 教育| 阜平县| 罗源县| 闽清县| 瓦房店市| 湘潭县| 淮阳县| 南靖县| 鲁山县| 德江县| 东明县| 兴化市| 文山县| 岳西县| 彭水| 兖州市| 东兰县| 通化市| 马尔康县| 海阳市| 昌黎县| 大悟县| 涞水县| 凤凰县| 祁连县| 滁州市| 武汉市| 潜江市|