【解決方法】派生コントロールからのカスタム依存関係プロパティの値が VS のプロパティ エディターに表示されない

プログラミングQA


私は「Visual Studio 2022」に取り組んでおり、「.NET Framework 4.8.1」を使用して派生コントロールを作成しています。 私の場合は「ツールヒント」であり、そのカスタム依存関係プロパティの問題に直面しています。 カスタム依存関係プロパティの値を既定値以外に変更するたびに、アプリを実行して閉じた後、「Visual Studio」の「プロパティ エディター」でフィールドが空になります!!!

私が試したこと:

これは、派生した「ToolTip」コントロールのコード例です。

C#
namespace MyControlLibrary.Controls
{
    public class MyToolTip : ToolTip
    {
        public enum IconTypes
        {
            Custom,
            Error,
            Information,
            None,
            Question,
            Warning,
        }

        public static readonly DependencyProperty IconTypeProperty =
            DependencyProperty.Register(nameof(IconType),
                                        typeof(IconTypes),
                                        typeof(MyToolTip),
                                        new FrameworkPropertyMetadata(IconTypes.None,
                                                                      new PropertyChangedCallback(OnIconTypeChanged)));

        [Category("MyCategory")]
        [Description("...")]
        public IconTypes IconType
        {
            get { return (IconTypes)GetValue(IconTypeProperty); }
            set { SetValue(IconTypeProperty, value); }
        }

        private static void OnIconTypeChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            
        }

        static MyToolTip()
        {
            //DefaultStyleKeyProperty.OverrideMetadata(typeof(MyToolTip), new FrameworkPropertyMetadata(typeof(MyToolTip)));
        }

        public MyToolTip()
        {
            
        }
    }
}

そして、これは私がそれを「MainWindow」にテストする方法です:

XML
<Window
    x:Class="MyApp.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    
    xmlns:local="clr-namespace:MyApp"
    xmlns:MyControls="clr-namespace:MyControlLibrary.Controls;assembly=MyControlLibrary"
        
    Title="MainWindow"
    Height="450"
    Width="800"
    WindowStartupLocation="CenterScreen">

    <Grid>
        <Button
            Content="MyToolTip Test"
            Cursor="Hand"
            Padding="9"
            HorizontalAlignment="Center"
            VerticalAlignment="Center">
            <Button.ToolTip>
                <MyControls:MyToolTip>
                    <StackPanel>
                        <TextBlock Text="MyToolTip Test!!!"/>
                    </StackPanel>
                </MyControls:MyToolTip>
            </Button.ToolTip>
        </Button>
    </Grid>

</Window>

また [^]これが問題を再現するVS解決策です!!!
なぜこれが起こっているのですか?

解決策 1

カスタム ツールチップの例を次に示します。 コントロール ツールチップ – 完全な WPF チュートリアル[^].

ツールチップのようにコントロールを拡張したい場合は、そのような DP を追加するだけではありません。 延長についての記事を書きました。 ToggleButton 作ります ToggleSwitch コントロール: C# および VB での柔軟な WPF ToggleSwitch Lookless コントロール[^]. ダウンロードして試してみて、記事を読んで参考にして、独自のカスタム コントロールを作成してください。

コメント

タイトルとURLをコピーしました