나는 아날로그 시계 제어를 설계했다. 두 개의 타원의 획을 사용하여 바깥 쪽 테두리와 시계 모양의 안쪽 테두리를 나타냅니다.WPF에서 두 데이터 바인딩 된 값의 합계로 바인딩하는 방법?
나는 사용자가이 두 가지의 테두리 두께를 변경할 수 있도록 해당 UserControl의 속성을 노출했다. Ellipse.StrokeThickness 속성은 이러한 UserControl 속성에 바인딩됩니다. 경계의 크기가 증가 할 때이 숨겨지지 않도록 순간, 나는 내부 요소의 여백에 바깥 쪽 테두리 두께의 UserControl 속성을 결합하고있다.
<Ellipse Name="OuterBorder" Panel.ZIndex="1" StrokeThickness="{Binding OuterBorderThickness,
ElementName=This}" Stroke="{StaticResource OuterBorderBrush}" />
<Ellipse Name="InnerBorder" Panel.ZIndex="5" StrokeThickness="{Binding InnerBorderThickness,
ElementName=This}" Margin="{Binding OuterBorderThickness, ElementName=This}"
Stroke="{StaticResource InnerBorderBrush}">
...
<Ellipse Name="Face" Panel.ZIndex="1" Margin="{Binding OuterBorderThickness, ElementName=This}"
Fill="{StaticResource FaceBackgroundBrush}" />
...
문제는 내부 경계의 두께가 증가하면,이 부분적으로 가려진 또는 숨겨진 될 수 여백 그래서 시간 눈금과 숫자에 영향을주지 않는다는 것입니다. 그래서 실제로 필요한 것은 내부 컨트롤의 여백 속성을 내부 테두리 두께 값과 외부 테두리 두께 값의 합으로 바인딩 할 수 있다는 것입니다 (두 가지 유형 임).
나는이 성공적으로 사용 '의 DataContext =이;'했던,하지만 난 그것을하지 않는 것이 좋습니다 소리로이없이 제어를 다시 작성하려합니다. 나는 또한 변환기를 사용하고 두 번째 값을 ConverterParameter로 전달하는 것에 대해 생각했지만 ConverterParameter에 바인딩하는 방법을 알지 못했습니다. 모든 팁은 크게 감사하겠습니다.
편집 >> 켄트의 제안에
덕분에, I는 입력 값을 추가하고 결과를 반환하는 간단한 MultiConverter을 만들었습니다. 나는 TextBlock.Text 속성과 TextBlock.Margin 속성 모두를 테스트 할 수있는 컨버터 XAML와 같은 multibinding을 구부려했습니다.
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource SumConverter}" ConverterParameter="Add">
<Binding Path="OuterBorderThickness" ElementName="This" />
<Binding Path="InnerBorderThickness" ElementName="This" />
</MultiBinding>
</TextBlock.Text>
<TextBlock.Margin>
<MultiBinding Converter="{StaticResource SumConverter}" ConverterParameter="Add">
<Binding Path="OuterBorderThickness" ElementName="This" />
<Binding Path="InnerBorderThickness" ElementName="This" />
</MultiBinding>
</TextBlock.Margin>
</TextBlock>
나는 TexBlock에 표시되는 정확한 값을 볼 수 있지만 여백이 설정되어 있지 않습니다. 어떤 아이디어?
편집 >> >>
는 흥미롭게도, 여백 속성을 두 번 유형의 데이터 속성에 바인딩 할 수 있지만 이것은 MultiBinding 내에서 적용하지 않는 것 같습니다. 켄트 (Kent)의 조언에 따라, 저는 두께 변환기로 값을 반환하도록 변환기를 변경했으며 이제는 작동합니다. Kent에게 감사드립니다.
나는 입력 값을 추가하고 결과를 반환하는 간단한 MultiConverter을 만들었습니다. TextBlock.Text 속성과 Grid.Margin 속성 모두에 대해 동일한 XBinding을 XAML 변환기와 연결했습니다. TexBlock에서 정확한 값을 볼 수는 있지만 여백은 설정되지 않았습니다. 어떤 아이디어? – Sheridan
'Margin'은 'Thickness' 유형이므로 변환기는 그 인스턴스를 반환해야합니다. Visual Studio에서 출력 창을 확인할 수 있으며 그 결과에 대한 메시지가 나타납니다. –
아, 이상하네요.하지만 맞습니다. 흥미롭게도 Margin 속성은 double 유형의 데이터 속성에 바인딩 될 수 있지만 MultiBinding에는 적용되지 않는 것 같습니다. – Sheridan