将显示的模式(路径)绑定到数据模型/如何使路径具有相同的尺寸
背景
[随意跳过这个]
我正在建立一个程序来处理马匹,它们的主人和主人的赛车颜色(丝绸)。 这个问题是关于一个名为SilksControl
的UserControl
,它充当了JockeySilks
的视图。
为了表示丝绸,我使用以下类枚举:
public class JockeySilks { public BodyPatterns BodyPattern { get; set; } public Colour BodyColour1 { get; set; } public Colour BodyColour2 { get; set; } public SleevePatterns SleevePattern { get; set; } public Colour SleeveColour1 { get; set; } public Colour SleeveColour2 { get; set; } public CapPatterns CapPattern { get; set; } public Colour CapColour1 { get; set; } public Colour CapColour2 { get; set; } }
如您所见,骑师丝绸的每个元素都有不同的图案和颜色。 每个元素的主要部分是[Item] Colour1,模式用[Item] Colour2填充。
SilksControl
的基本组成是一个ViewBox
,它包含一个Canvas
,而Canvas
又包含许多Path
。 我将每个模式绘制为子Canvas
Path
s。
这是一张照片。 在此示例中, CapPattern
和BodyPattern
设置为Plain
, ArmPattern
设置为ArmPattern
。
问题
我试图找出基于WPF数据绑定设置模式的最佳方法。 但是,有一个问题:每个模式Path
都有不同的Canvas.Top
和Canvas.Left
值和维度。 “最好的方式”是指简单,易读且易于实现的东西。
我考虑过的方法
- 在代码中切换路径 – 可能类似于
pthCapPattern = CapPatterns[SilksModel.CapPattern]
,其中CapPatterns
是Dictionary
或者可能从资源访问它 - 将某些控件/面板的内容绑定到
SilksModel.[Item]Pattern
使用转换器生成/从资源/字典中提取路径的SilksModel.[Item]Pattern
- 拥有XAML中的所有
Path
并更改每个Path
的可见性 - 找出一种协调维度差异然后创建1个路径并绑定到其
Path.Data
属性的方法(可能在资源中有一些StreamGeometry
,使用转换器从枚举到StreamGeometry
)
所以解决方案4是我首选的解决方案,但正如我所提到的,我不知道如何做到这一点,我的谷歌搜索技能无法提供任何有用的东西。 如果做不到这一点,解决方案2将是下一个最好的事情,但我不知道任何容器提供与canvas相同的function并提供绑定到子/内容。
编辑1:
这可能不是最干净的解决方案,但这样的事情对你有效(显然你会将几何初始化从构造函数中移出)?
您可以创建建议的Dictionary
对象并使用路径信息填充它,但也可以将“ Transform
应用于“ Geometry
以便为其提供相对于“ Canvas
所需的尺寸/偏移量。
public partial class Horses : UserControl, INotifyPropertyChanged { public enum CapPattern { ChevronPattern, SomeOtherPattern }; public Dictionary Patterns { get; set; } private Geometry currentPath; public Geometry CurrentPath { get { return this.currentPath; } set { this.currentPath = value; NotifyPropertyChanged(); } } public Horses() { Patterns = new Dictionary(); Patterns.Add( CapPattern.ChevronPattern, Geometry.Combine( Geometry.Parse("M21.750001,94.749999 L34.000002,117.66218 30.625003,133.62501 17.000006,113.32909 0.5,126.75 3.2500048,108.125 z M212.418,93.416999 L230.918,106.79199 233.668,125.41701 217.168,111.99609 203.543,132.292 200.168,116.32917 z M32.25,48.374999 L44.250004,72.249999 40.625004,90.249999 28.000003,68.581336 7.750001,82.249999 11.665709,64.166339 z M201.918,47.041991 L222.50229,62.833335 226.418,80.916991 206.168,67.248336 193.543,88.916999 189.918,70.916991 z M41,1.8329993 L55.000002,28.166337 51.66667,45.832999 37.333336,23.499837 16.666001,37.417269 21.66571,19.418135 z M193.168,0.5 L212.50229,18.085143 217.502,36.084262 196.83467,22.166836 182.50133,44.499991 179.168,26.833333 z"), Geometry.Empty, GeometryCombineMode.Union, new TranslateTransform(0, 0))); Patterns.Add( CapPattern.SomeOtherPattern, Geometry.Combine( Geometry.Parse("M21.750001,94.749999 L34.000002,117.66218 30.625003,133.62501 17.000006,113.32909 0.5,126.75 3.2500048,108.125 z M212.418,93.416999 L230.918,106.79199 233.668,125.41701 217.168,111.99609 203.543,132.292 200.168,116.32917 z M32.25,48.374999 L44.250004,72.249999 40.625004,90.249999 28.000003,68.581336 7.750001,82.249999 11.665709,64.166339 z M201.918,47.041991 L222.50229,62.833335 226.418,80.916991 206.168,67.248336 193.543,88.916999 189.918,70.916991 z M41,1.8329993 L55.000002,28.166337 51.66667,45.832999 37.333336,23.499837 16.666001,37.417269 21.66571,19.418135 z M193.168,0.5 L212.50229,18.085143 217.502,36.084262 196.83467,22.166836 182.50133,44.499991 179.168,26.833333 z"), Geometry.Empty, GeometryCombineMode.Union, new TranslateTransform(20, 30))); InitializeComponent(); } // INotifyPropertyChanged implementaton. }
在我的模拟中,我已经从该字典中填充了一个ComboBox
,它设置了一个属性CurrentPath
,它绑定到Canvas
上的Path
:
您将保留对Fill
和其他属性的绑定。
另一种方法可以是创建一个小类,它包含您的Path
信息,以及所需的Top
, Left
, Transform
或定位模式所需的任何其他信息。 然后,您可以以与上述类似的方式将这些对象的列表绑定到ComboBox
,并将Canvas
和Path
上的所有必需属性绑定到当前所选对象的属性。
编辑:
您还可以在这些行中在ResourceDictionary
配置转换:
上述就是C#学习教程:将显示的模式(路径)绑定到数据模型/如何使路径具有相同的尺寸分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/949366.html