캔버스의 하위 항목 인 기존 항목이 있습니다. 항목의 스타일은 항목을 색칠하는 데 사용할 수있는 다양한 브러시가 들어있는 리소스 사전에 포함되어 있습니다.XAMLReader를 사용하여 WPF 업데이트 컨트롤
항목의 인스턴스를 만들 때 기본 채색이 지정됩니다. 내가 직접 같이 채우기 속성과 상호 작용하는 현재 수 없습니다입니다 :
item.Fill = BrushBlue;
내가 항목의 각 인스턴스에 대한 XAML에서 찾기 시작 이러한 이유로.
내가 만든 인스턴스 후 항목에 관심 오전 XAML은 다음과 같습니다
<d:Item IsSelected="True" Width="78" Height="65" Panel.ZIndex="0" Canvas.Left="233" Canvas.Top="352.54">
<Path ToolTip="Process">
<Path.Style>
<Style TargetType="Path">
<Style.BasedOn>
<Style TargetType="Path">
<Style.Resources>
<ResourceDictionary />
</Style.Resources>
<Setter Property="Shape.Fill">
<Setter.Value>
<DynamicResource ResourceKey="ItemBrush" />
</Setter.Value>
</Setter>
</Style>
</Style.BasedOn>
</Style>
</Path.Style>
</Path>
.
.
.
</d:Item>
내가 이상적으로 항목의 인스턴스의 속성에 Shape.Fill 값을 묶을 수 있도록하고 싶습니다
, 또는 적어도 응용 프로그램에서 사용자 선택에 따라 그 값을 변경할 수 있어야합니다.
항목의 XAML을 편집하여 채우기 색상을 변경합니다. 내가 MSDN에서 버튼 복제 샘플을 기반으로, 다음 코드를 사용하고이를 달성하기 위해 : 나는 브러시 리소스 이름을 업데이트합니다 XAML을 받고 다음 새 항목을 생성하고
string savedItem = XamlWriter.Save(this) as String;
string newItem = savedItem.Replace(GetFillBrush(this), "BrushBlue");
SetFillBrush(this, "BrushBlue");
StringReader stringReader = new StringReader(newItem);
XmlReader xmlReader = XmlReader.Create(stringReader);
thisCanvas.Children.Add((Item)XamlReader.Load(xmlReader));
.
이 접근법은 개념 증명이었습니다. 캔버스에 새 항목을 만들지 않고도 기존 항목의 XAML을 업데이트 할 수 있어야합니다.
항목의 fill 속성에 대한 "전체"업데이트를 수행하는 가장 좋은 방법은 무엇입니까? 로 항목을 캡슐화
item.Fill = Brushes.Blue;
당신이 무엇을해야하는 경우입니다 :
브러시는 현재 한 곳에서만 사용되지만 현재이 속성에 직접 액세스 할 수 없습니다. 항목 스타일의 현재 설정에 대한 추가 정보를 추가했습니다. – amarcy
바인딩 접근법은 내가 볼 수있는 코드에서 작동해야합니다. Item 클래스에 Fill 의존성 속성을 선언하고 Setter를
itowlson
setter를 위의 값으로 변경하면 다음 오류가 발생합니다. " 'AncestorType {x : Type d : Item}'문자열을 'System.Windows.Data.RelativeSourceMode'유형의 개체로 변환 할 수 없습니다. x : Type d : Item}은 (는) RelativeSourceMode에 유효한 값이 아닙니다. " 어떤 조언이 필요합니까? – amarcy