Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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# Can';t在设计器中更新WPF用户控件_C#_Wpf - Fatal编程技术网

C# Can';t在设计器中更新WPF用户控件

C# Can';t在设计器中更新WPF用户控件,c#,wpf,C#,Wpf,我真的疯了,我做了我在网上找到的一切,但仍然没有机会 我有一个简单的矩形和一个红色/蓝色的枚举。我想在designer中通过用户更改值来设置其颜色的动画 MyCustomUC.xaml.cs using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Anim

我真的疯了,我做了我在网上找到的一切,但仍然没有机会

我有一个简单的矩形和一个红色/蓝色的枚举。我想在designer中通过用户更改值来设置其颜色的动画

MyCustomUC.xaml.cs

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.ComponentModel;
using System.Diagnostics;

namespace WpfApp1
{
    public enum Pill
    { red = 1, blue = 2 }

    public partial class MyCustomUC : UserControl
    {
        private Color ColorToAnim = Color.FromRgb(255, 0, 0);

        public static DependencyProperty pill_mode = DependencyProperty.Register(
        "pillmodeval", typeof(Pill), typeof(MyCustomUC),
         new PropertyMetadata(Pill.blue, // ISSUE 1 : Default Value Is Not Working , It's always 0
         new PropertyChangedCallback(OnValueChanged)
        )); 

        [Category("Pills")]
        public Pill pillmodeval
        {
            get { return (Pill)GetValue(pill_mode); }
            set { SetValue(pill_mode, value); }
        }

        public MyCustomUC()
        {
            InitializeComponent(); //// Not Firing Either 
            color_output.Fill = new SolidColorBrush(ColorToAnim);

            // ISSUE 2 : MessageBox.Show , Debug.WriteLine Not Work On Design Mode
            MessageBox.Show("MyCustomUC Created!");
            Debug.WriteLine("MyCustomUC Created!");
        }

        void AnimateColor()
        {
            ColorAnimation new_color_anim = new ColorAnimation(ColorToAnim, TimeSpan.FromSeconds(1));
            color_output.Fill.BeginAnimation(SolidColorBrush.ColorProperty, new_color_anim);
        }

        void UpdateColor()
        {
            if (pillmodeval == Pill.red)
            {
                ColorToAnim = Color.FromRgb(0, 0, 255);
                pillmodeval = Pill.blue;
            }
            else
            {
                ColorToAnim = Color.FromRgb(255, 0, 0);
                pillmodeval = Pill.red;
            }
        }

        private void color_output_MouseUp(object sender, MouseButtonEventArgs e)
        {
            UpdateColor();
        }

        private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            MyCustomUC custom_uc = (MyCustomUC)d;
            // ISSUE 3 : AnimateColor not working in Designer
            custom_uc.AnimateColor();
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            // ISSUE 2 : MessageBox.Show , Debug.WriteLine Not Work On Design Mode
            MessageBox.Show("MyCustomUC Loaded!");
            Debug.WriteLine("MyCustomUC Loaded!");
        }
    }
}
MyCustomUC.xaml:

<UserControl x:Class="WpfApp1.MyCustomUC"
             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:local="clr-namespace:WpfApp1"
             mc:Ignorable="d" 
             d:DesignHeight="100" d:DesignWidth="100" Loaded="UserControl_Loaded">
    <Grid>
            <Rectangle x:Name="color_output" Fill="Black" MouseUp="color_output_MouseUp" />
    </Grid>
</UserControl>


问题:

<UserControl x:Class="WpfApp1.MyCustomUC"
             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:local="clr-namespace:WpfApp1"
             mc:Ignorable="d" 
             d:DesignHeight="100" d:DesignWidth="100" Loaded="UserControl_Loaded">
    <Grid>
            <Rectangle x:Name="color_output" Fill="Black" MouseUp="color_output_MouseUp" />
    </Grid>
</UserControl>

  • 构造函数调用在设计器中不起作用
  • OnLoad调用在设计器中不起作用
  • AnimateColor在Designer中不起作用
  • DependencyProperty默认值始终为零,不适用于枚举

如何使此代码工作?

Visual Studio XAML designer就是这样工作的。无法查看动画,因为您将库引用为解决方案项目。VS designer不会在设计时为作为解决方案项目引用的库运行任何complie-time代码

VS designer将只显示可以应用的更改,而无需编译整个库。为此,您必须使用XAML绑定,而不是使用后台代码,例如:


Abc
公共部分类UserControl1:UserControl
{
公共用户控制1()
{
初始化组件();
}
公共图书馆
{
获取{return(bool)GetValue(showtproperty);}
set{SetValue(showittproperty,value);}
}
公共静态只读从属属性ShowItProperty=
DependencyProperty.Register(“ShowIt”、typeof(bool)、typeof(UserControl1)、newpropertyMetadata(true));
}

您可以在materialdesigninxaml.net库的控件中看到动画,因为您直接将其引用为DLL库。如果将库引用为已编译的DLL,则动画应按预期工作


这就是VisualStudioXAML设计器的工作原理。无法查看动画,因为您将库引用为解决方案项目。VS designer不会在设计时为作为解决方案项目引用的库运行任何complie-time代码

VS designer将只显示可以应用的更改,而无需编译整个库。为此,您必须使用XAML绑定,而不是使用后台代码,例如:


Abc
公共部分类UserControl1:UserControl
{
公共用户控制1()
{
初始化组件();
}
公共图书馆
{
获取{return(bool)GetValue(showtproperty);}
set{SetValue(showittproperty,value);}
}
公共静态只读从属属性ShowItProperty=
DependencyProperty.Register(“ShowIt”、typeof(bool)、typeof(UserControl1)、newpropertyMetadata(true));
}

您可以在materialdesigninxaml.net库的控件中看到动画,因为您直接将其引用为DLL库。如果将库引用为已编译的DLL,则动画应按预期工作


Visual Studio XAML设计器是实际标记的静态表示。它不执行任何方法。它使用属性默认值进行显示。但是您可以提供一个上下文来获得当前视图的更完整的外观。要设计和/或视觉状态,您可以使用。它提供了很多额外功能来生成视图代码,而无需编写太多代码,如触发器、行为、事件处理程序、动画、视觉状态、模板、,etc@BionicCode但我认为这是可能的,库中的所有内容都是在designer中实时发生的。@BionicCode所以你的意思是它只在标记代码中可能,而不是在viewmodel中,对吗?那么defaul enum呢?你所说的“实时发生”是什么意思?您可以单击按钮并触发动画吗?我对此表示怀疑。这与图书馆无关。设计师就是这样工作的。但您可以在不确定模式下显示未由诸如
ProgressBar
之类的交互触发的动画。您可以设置自定义值以初始化视图模型的绑定,例如
TextBlock.Text
ListView.ItemsSource
以显示一些设计时值。检查Visual Studio XAML设计器是否是实际标记的静态表示形式。它不执行任何方法。它使用属性默认值进行显示。但是您可以提供一个上下文来获得当前视图的更完整的外观。要设计和/或视觉状态,您可以使用。它提供了很多额外功能来生成视图代码,而无需编写太多代码,如触发器、行为、事件处理程序、动画、视觉状态、模板、,etc@BionicCode但我认为这是可能的,库中的所有内容都是在designer中实时发生的。@BionicCode所以你的意思是它只在标记代码中可能,而不是在viewmodel中,对吗?那么defaul enum呢?你所说的“实时发生”是什么意思?您可以单击按钮并触发动画吗?我对此表示怀疑。这与图书馆无关。设计师就是这样工作的。但您可以在不确定模式下显示未由诸如
ProgressBar
之类的交互触发的动画。您可以设置自定义值以初始化视图模型的绑定,例如
TextBlock.Text
ListView.ItemsSource
以显示一些设计时值。检查