예를 직면합니다. 시각적으로 테두리 안에 사각형이있는 VisualBrush를 사용하여 다른 두 브러쉬를 결합하십시오. 이 같은
뭔가 :
<LinearGradientBrush x:Key="UnderBrush" EndPoint="0,1">
<GradientStop Color="#FFFF0000" Offset="0" />
<GradientStop Color="#00FF0000" Offset="1" />
</LinearGradientBrush>
<LinearGradientBrush x:Key="OverBrush" EndPoint="1,0">
<GradientStop Color="#00000000" Offset="0" />
<GradientStop Color="#FF000000" Offset="1" />
</LinearGradientBrush>
<VisualBrush x:Key="CombinedBrush">
<VisualBrush.Visual>
<Border Background="{StaticResource UnderBrush}">
<Rectangle Fill="{StaticResource OverBrush}" Width="1" Height="1" />
</Border>
</VisualBrush.Visual>
</VisualBrush>
CombinedBrush은 막대를 칠하는 데 사용할 수 있습니다, 당신은 당신이 설명하는 효과를 얻을 것이다.
실버 버전
실버 라이트는 어떤 비주얼 당신이 코드에서 WritableBitmap를 구축하고 ImageBrush와 함께 사용한다이 없기 때문에 :
여기
<ImageBrush x:Key="CombinedBrush">
<my:VisualBrushSimulator.Visual>
<Border Background="{StaticResource UnderBrush}">
<Rectangle Fill="{StaticResource OverBrush}" Width="1" Height="1" />
</Border>
</my:VisualBrushSimulator.Visual>
</ImageBrush>
가 VisualBrushSimulator이 구현 될 수있는 방법은 다음과 같습니다
을
public class VisualBrushSimulator : DependencyObject
{
public Visual GetVisual(DependencyObject obj) { return (Visual)obj.GetValue(VisualProperty); }
public void SetVisual(DependencyObject obj, Visual value) { obj.SetValue(VisualProperty, value); }
public static readonly DependencyProperty VisualProperty = DependencyProperty.RegisterAttached("Visual", typeof(Visual), typeof(VisualBrushSimulator), new PropertyMetadata
{
PropertyChangedCallback = (obj, e) =>
{
int width=1000;
int height=1000;
var bitmap = new WritableBitmap(width, height);
bitmap.Render((Visual)e.NewValue, new ScaleTransform { ScaleX = width, ScaleY = height });
((ImageBrush)obj).ImageSource = bitmap;
}
});
}
사실 VisBrush 시뮬레이션은 Visua 나는 브러시에 영향을주지 않습니다.
Silverlight에는 VisualBrush가 없습니다. –
질문에 WPF 및 Silverlight 태그가 지정되었습니다. VisualBrush를 사용하지 않으면이 작업이 더 어려워 일부 코드 숨김이 필요하지만 여전히 수행 할 수 있습니다. Silverlight 지원에 대한 답변을 업데이트하겠습니다. –