.NET Core WPF 用户控件设置设计时背景
.NET Core WPF User Control set design-time background
我尝试了 this existing answer 中介绍的两种方法,但均无效。如何设置背景颜色?
方法一
<UserControl x:Class="deletewpf.UserControl1"
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:deletewpf"
mc:Ignorable="d"
d:DesignStyle="{StaticResource MyDesignStyle}"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style TargetType="{x:Type Control}" x:Key="MyDesignStyle">
<Setter Property="Background" Value="White"/>
</Style>
</UserControl.Resources>
<Grid>
</Grid>
</UserControl>
方法二
<UserControl x:Class="deletewpf.UserControl2"
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:deletewpf"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<d:DesignerProperties.DesignStyle>
<Style TargetType="UserControl">
<Setter Property="Background" Value="White"/>
</Style>
</d:DesignerProperties.DesignStyle>
<Grid>
</Grid>
</UserControl>
在出现这些错误之前,我已按 运行 构建它。
这是 .NET Core 设计器的问题。在 .NET Framework 中,这两种方法都有效,但对于第一种方法,您必须使用 DynamicResource
,因为样式是在使用后声明的。
d:DesignStyle="{DynamicResource MyDesignStyle}"
.NET Core 有一个解决方法,也包含在其中一个答案中。您必须声明一个定义附加依赖属性的类型,这些属性检查您是否处于 运行 设计模式并设置相应的属性。这只是 Background
属性 的示例,但也可以扩展为使用 Style
。
public class DesignModeProperties : DependencyObject
{
public static readonly DependencyProperty BackgroundProperty = DependencyProperty.RegisterAttached(
"BackgroundProperty", typeof(Brush), typeof(DesignModeProperties),
new FrameworkPropertyMetadata(Brushes.Transparent, OnBackgroundChanged));
public static void OnBackgroundChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (DesignerProperties.GetIsInDesignMode(d) && d is Control control && e.NewValue is Brush brush)
control.Background = brush;
}
public static Brush GetBackground(DependencyObject dependencyObject)
{
return (Brush)dependencyObject.GetValue(BackgroundProperty);
}
public static void SetBackground(DependencyObject dependencyObject, Brush value)
{
dependencyObject.SetValue(BackgroundProperty, value);
}
}
将以下行添加到您的 UserControl
标记以启用设计模式背景。
local:DesignModeProperties.Background="White"
我尝试了 this existing answer 中介绍的两种方法,但均无效。如何设置背景颜色?
方法一
<UserControl x:Class="deletewpf.UserControl1"
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:deletewpf"
mc:Ignorable="d"
d:DesignStyle="{StaticResource MyDesignStyle}"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<Style TargetType="{x:Type Control}" x:Key="MyDesignStyle">
<Setter Property="Background" Value="White"/>
</Style>
</UserControl.Resources>
<Grid>
</Grid>
</UserControl>
方法二
<UserControl x:Class="deletewpf.UserControl2"
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:deletewpf"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<d:DesignerProperties.DesignStyle>
<Style TargetType="UserControl">
<Setter Property="Background" Value="White"/>
</Style>
</d:DesignerProperties.DesignStyle>
<Grid>
</Grid>
</UserControl>
在出现这些错误之前,我已按 运行 构建它。
这是 .NET Core 设计器的问题。在 .NET Framework 中,这两种方法都有效,但对于第一种方法,您必须使用 DynamicResource
,因为样式是在使用后声明的。
d:DesignStyle="{DynamicResource MyDesignStyle}"
.NET Core 有一个解决方法,也包含在其中一个答案中。您必须声明一个定义附加依赖属性的类型,这些属性检查您是否处于 运行 设计模式并设置相应的属性。这只是 Background
属性 的示例,但也可以扩展为使用 Style
。
public class DesignModeProperties : DependencyObject
{
public static readonly DependencyProperty BackgroundProperty = DependencyProperty.RegisterAttached(
"BackgroundProperty", typeof(Brush), typeof(DesignModeProperties),
new FrameworkPropertyMetadata(Brushes.Transparent, OnBackgroundChanged));
public static void OnBackgroundChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (DesignerProperties.GetIsInDesignMode(d) && d is Control control && e.NewValue is Brush brush)
control.Background = brush;
}
public static Brush GetBackground(DependencyObject dependencyObject)
{
return (Brush)dependencyObject.GetValue(BackgroundProperty);
}
public static void SetBackground(DependencyObject dependencyObject, Brush value)
{
dependencyObject.SetValue(BackgroundProperty, value);
}
}
将以下行添加到您的 UserControl
标记以启用设计模式背景。
local:DesignModeProperties.Background="White"