WPF用户控件创建多个布局选项

WPF用户控件创建多个布局选项,wpf,user-controls,templatebinding,Wpf,User Controls,Templatebinding,我有一个UserControl,我定义了各种属性,所以我可以为屏幕上的每个副本自定义它。我有一个使用LinearGradientBrush填充的路径。目前,这是硬编码到XAML中的。我已经将路径控件的宽度和可见性作为依赖项对象,并且可以轻松修改这些对象: <Path Visibility="{TemplateBinding PathAVisibility}" Width="{TemplateBinding PathALength}"> <Lin

我有一个UserControl,我定义了各种属性,所以我可以为屏幕上的每个副本自定义它。我有一个使用LinearGradientBrush填充的路径。目前,这是硬编码到XAML中的。我已经将路径控件的宽度和可见性作为依赖项对象,并且可以轻松修改这些对象:

<Path 
    Visibility="{TemplateBinding PathAVisibility}"
    Width="{TemplateBinding PathALength}">
        <LinearGradientBrush EndPoint="0,0.5" MappingMode="RelativeToBoundingBox" StartPoint="1,0.5">
            <GradientStop Color="#07FFFFFF" Offset="0.812"/>
            <GradientStop Color="Red"/>
            <GradientStop Color="#00000000" Offset="0.993"/>
            <GradientStop Color="#FF956666" Offset="0.62"/>
        </LinearGradientBrush>...

...
我想做的是创建一些渐变作为选项,然后在WPF XAML设计器中选择它们作为属性。像“GradA”是红色的,“GradB”是蓝色的,但没有透明度,等等

通过可见性,我可以在设计视图中将“可见/隐藏/折叠”视为可供选择的选项,而这正是我所追求的

这就是我被困的地方。我甚至不知道这将被称为什么,或者如何处理它


任何我应该查看的方向的指针?

您可以使用
枚举
Xaml
中提供所需的固定值,然后您可以使用
枚举
依赖属性上的
属性ChangedCallback
来更改
画笔

下面是一个非常快速的示例

代码:

Xaml:


用法:

<StackPanel Orientation="Horizontal">
    <local:UserControl1 BrushType="BrushA" />
    <local:UserControl1 BrushType="BrushB" />
    <local:UserControl1 BrushType="BrushC" />
</StackPanel>

结果:


一个很好的特性是可视状态,它可以最大限度地减少您的编码工作量。了解他们。还有其他机制可以实现这一点。样式、模板和触发器的组合也会起作用,但会使访问组件代码中的UI元素变得更加困难。

好的,所以我错误地认为我有一个usercontrol,但我没有我实际上有一个ResourceDictionary,然后我就有了一个基于它的控件。我已经查过你的代码了,这几乎是一种享受。找不到A/B/C资源。如果我将它们作为页面资源放在页面级别,那么它会编译,但不会设置颜色。我会认为你的答案是正确的,因为它确实符合我的要求。是我的错,我把线弄错了。你能告诉我应该把SolidcolorBrush资源放在资源字典的什么地方吗?非常感谢您花了这么多时间。您可以将画笔放在控件中的任何位置,如果您只在可以放置的路径上使用画笔,则可以将画笔放在中,或者放在父容器中,如果您不使用UserControl,则所有框架元素都有自己的ResourcesHank。我会在周末做更多的研究,看看它会把我带到哪里。谢谢你。它可能会帮助我,当我来做一个图像动画,我正在计划。
<UserControl x:Class="WPFListBoxGroupTest.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" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <UserControl.Resources>
        <SolidColorBrush x:Key="BrushA" Color="Red" />
        <SolidColorBrush x:Key="BrushB" Color="Yellow" />
        <SolidColorBrush x:Key="BrushC" Color="Blue" />
    </UserControl.Resources>

    <Grid Background="{Binding MyBrush}" />

</UserControl>
<StackPanel Orientation="Horizontal">
    <local:UserControl1 BrushType="BrushA" />
    <local:UserControl1 BrushType="BrushB" />
    <local:UserControl1 BrushType="BrushC" />
</StackPanel>