Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-VS2019如何自定义控件,使其在从工具箱拖动到设计视图时具有默认值?_C#_Wpf_Visual Studio_Wpf Controls_Toolbox - Fatal编程技术网

C# WPF-VS2019如何自定义控件,使其在从工具箱拖动到设计视图时具有默认值?

C# WPF-VS2019如何自定义控件,使其在从工具箱拖动到设计视图时具有默认值?,c#,wpf,visual-studio,wpf-controls,toolbox,C#,Wpf,Visual Studio,Wpf Controls,Toolbox,将自定义控件拖动到“设计”视图中时,它只会在xaml.cs中将其清空 但是,当我将文本框从工具箱拖到设计视图中时,它会弹出默认变量,如: 已在xaml中填写 如何为自己的自定义控件设置这些默认值?我到处都找遍了,甚至不知道要找什么才能找到答案 我希望我的控件在拖动到“设计”视图时如下所示: 与上面TextBox的Text=“TextBox”和TextWrapping=“Wrap”类似,我希望我的机器能够自动输入TextBoxContent=“Text”和Label=“Text” 我已经查看

将自定义控件拖动到“设计”视图中时,它只会在xaml.cs中将其清空

但是,当我将文本框从工具箱拖到设计视图中时,它会弹出默认变量,如:

已在xaml中填写

如何为自己的自定义控件设置这些默认值?我到处都找遍了,甚至不知道要找什么才能找到答案

我希望我的控件在拖动到“设计”视图时如下所示:

与上面TextBox的Text=“TextBox”TextWrapping=“Wrap”类似,我希望我的机器能够自动输入TextBoxContent=“Text”Label=“Text”

我已经查看了TextBox.cs的源代码,没有发现任何明显的点使它能够自动执行此操作。下面是TextBox文本的依赖属性和公共属性

        /// <summary>
        /// The DependencyID for the Text property.
        /// Default Value:      ""
        /// </summary>
        public static readonly DependencyProperty TextProperty =
                DependencyProperty.Register(
                        "Text", // Property name
                        typeof(string), // Property type
                        typeof(TextBox), // Property owner
                        new FrameworkPropertyMetadata( // Property metadata
                                string.Empty, // default value
                                FrameworkPropertyMetadataOptions.BindsTwoWayByDefault | // Flags
                                    FrameworkPropertyMetadataOptions.Journal,
                                new PropertyChangedCallback(OnTextPropertyChanged),    // property changed callback
                                new CoerceValueCallback(CoerceText),
                                true, // IsAnimationProhibited
                                UpdateSourceTrigger.LostFocus   // DefaultUpdateSourceTrigger
                                ));
//
///文本属性的DependencyID。
///默认值:“
/// 
公共静态只读DependencyProperty TextProperty=
从属属性。寄存器(
“Text”,//属性名称
typeof(字符串),//属性类型
typeof(TextBox),//属性所有者
新的FrameworkPropertyMetadata(//属性元数据
string.Empty,//默认值
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault |//标志
FrameworkPropertyMetadataOptions.Journal,
新建PropertyChangedCallback(OnTextPropertyChanged),//属性更改回调
新的强制值回调(强制文本),
true,//isanimation禁止
UpdateSourceTrigger.LostFocus//DefaultUpdateSourceTrigger
));

//
///文本框的内容。
/// 
[默认值(“”)
[可本地化性(LocalizationCategory.Text)]
公共字符串文本
{
获取{return(string)GetValue(TextProperty);}
set{SetValue(TextProperty,value);}
}
感谢所有阅读本文并能提供帮助的人

编辑: 带有“SFTEPutLayout”的Syncfusion示例当我将其拖到设计视图时,它会自动添加一个文本框子项,并用“John”填充该文本框文本


当控件拖到设计视图时,会自动添加Hint=“name”和Text=“John”。我想对我的控件执行类似的操作。

@wyattk。 当我将控件拖动到XAML中时,该控件不显示关联的属性。我查阅了相关文件,但没有找到相关设置。这可能是控件的Visual Studio设置。 为了设置自定义控件属性的默认值,我制作了一个自定义控件,当它从“工具箱”拖到设计视图中时,它有dependencProperty角度和一个默认值。这是我的代码,您可以参考它来设置自定义控件的默认值

xaml代码:

<Grid>
        <local:MyControl Content="MyControl" HorizontalAlignment="Left" Margin="330,221,0,0"  VerticalAlignment="Top" Width="75"/>
</Grid>
更新:

为提供VS designer的默认值。你可以试着使用class。我在Visual Studio Enterprise 2019版本16.9.3中创建了我的程序。 请将Microsoft.Windows.Design.Extensibility和Microsoft.Windows.Design.Interaction添加到项目引用中。 步骤是:在程序中的引用上单击鼠标右键,然后在弹出框中选择“添加引用…”,然后可以在“引用管理器”页面上选择程序集,然后搜索依赖项

CustomControl1代码如下所示:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using Microsoft.Windows.Design.Model;
using Microsoft.Windows.Design.Features;

namespace MyControl
{
    [Feature(typeof(myDefaults))]
    public class CustomControl1 : Control
    {
        static CustomControl1()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
        }
        static double num = 70.0;

        public CustomControl1()
        {
            this.Initialized += (s, e) =>
            {
                var element = s as UIElement;
                if (element != null)
                {
                    element.RenderTransformOrigin = new Point(0.5, 0.5);
                    element.RenderTransform = new RotateTransform(num);
                }
            };
        }
        public double Angle
        {
            get { return (double)GetValue(AngleProperty); }
            set { SetValue(AngleProperty, value); }
        }

        public static readonly DependencyProperty AngleProperty =
        DependencyProperty.RegisterAttached("Angle", typeof(double), typeof(CustomControl1), new PropertyMetadata(num, OnAngleChanged));

        private static void OnAngleChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            num = (double)e.NewValue;
            var element = obj as UIElement;
            if (element != null)
            {
                element.RenderTransformOrigin = new Point(0.5, 0.5);
                element.RenderTransform = new RotateTransform(num);
            }
        }

        public class myDefaults : DefaultInitializer
        {
            public override void InitializeDefaults(ModelItem item)
            {
                item.Name = "myControl";
                item.Properties["Angle"].SetValue("70.0");
            }
        }

    }
}
然后将此控件拖放到Design上,您将在XAML中看到以下代码:

<local:CustomControl1 x:Name="myControl" Angle="70.0" HorizontalAlignment="Left" Height="100" Margin="252,66,0,0" VerticalAlignment="Top" Width="100"/>

结果是:

这不是我要找的。感谢您的回复,但是,我正在寻找一种方法来设置您所称的“控件的VisualStudio设置”。当我将syncfusion控件拖到设计时,它也会进行类似的填充。我也会用syncfusion的例子更新主帖子。嗨,@wyattk。我已经更新了我的答案,你可以检查一下,如果你有任何问题请告诉我。
public class MyControl : Button
    {
        static double num = 90.0;

        public MyControl()
        {
            this.Initialized += (s, e) =>
            {
                var element = s as UIElement;
                if (element != null)
                {
                    element.RenderTransformOrigin = new Point(0.5, 0.5);
                    element.RenderTransform = new RotateTransform(num);
                }
            };
        }
        public double Angle
        {
            get { return (double)GetValue(AngleProperty); }
            set { SetValue(AngleProperty, value); }
        }

        public static readonly DependencyProperty AngleProperty =
        DependencyProperty.RegisterAttached("Angle", typeof(double), typeof(MyControl), new PropertyMetadata(num, OnAngleChanged));

        private static void OnAngleChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            num = (double)e.NewValue;
            var element = obj as UIElement;
            if (element != null)
            {
                element.RenderTransformOrigin = new Point(0.5, 0.5);
                element.RenderTransform = new RotateTransform(num);
            }
        }
    }
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using Microsoft.Windows.Design.Model;
using Microsoft.Windows.Design.Features;

namespace MyControl
{
    [Feature(typeof(myDefaults))]
    public class CustomControl1 : Control
    {
        static CustomControl1()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
        }
        static double num = 70.0;

        public CustomControl1()
        {
            this.Initialized += (s, e) =>
            {
                var element = s as UIElement;
                if (element != null)
                {
                    element.RenderTransformOrigin = new Point(0.5, 0.5);
                    element.RenderTransform = new RotateTransform(num);
                }
            };
        }
        public double Angle
        {
            get { return (double)GetValue(AngleProperty); }
            set { SetValue(AngleProperty, value); }
        }

        public static readonly DependencyProperty AngleProperty =
        DependencyProperty.RegisterAttached("Angle", typeof(double), typeof(CustomControl1), new PropertyMetadata(num, OnAngleChanged));

        private static void OnAngleChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
        {
            num = (double)e.NewValue;
            var element = obj as UIElement;
            if (element != null)
            {
                element.RenderTransformOrigin = new Point(0.5, 0.5);
                element.RenderTransform = new RotateTransform(num);
            }
        }

        public class myDefaults : DefaultInitializer
        {
            public override void InitializeDefaults(ModelItem item)
            {
                item.Name = "myControl";
                item.Properties["Angle"].SetValue("70.0");
            }
        }

    }
}
<local:CustomControl1 x:Name="myControl" Angle="70.0" HorizontalAlignment="Left" Height="100" Margin="252,66,0,0" VerticalAlignment="Top" Width="100"/>