首先看看VisualBrush的解釋,msdn上面的解釋是使用 Visual 繪制區域,那么我們再來看看什么是Visual呢?官方的解釋是:獲取或設置畫筆的內容,Visual 是直接繼承自DependencyObject,UIElement也是直接繼承自Visual,我們常見的控件都是繼承自Visual,Visual可以實現動態綁定,比如我們可以在代碼中這樣寫: <VisualBrush Visual="{Binding TodayPeriod}" Stretch="Fill"></VisualBrush> 這樣我們就可以把一個繼承自Visual的控件(此處為TodayPeriod的一個UserControl)通過綁定的方式綁定到Visual中,我們再來看看VisualBrush這個類,首先來看一段示例代碼:
<Border Grid.Column="1"> <Border.Background> <VisualBrush Stretch="Uniform"> <VisualBrush.Visual> <Ellipse Fill="#003769" Opacity="0.6" Stretch="Fill" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="100" Height="100"></Ellipse> </VisualBrush.Visual> </VisualBrush> </Border.Background> <StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock FontSize="120" Text="{Binding SuccessError.Total,RelativeSource={RelativeSource TemplatedParent}}" Horizont alAlignment="Center" VerticalAlignment="Center" Margin="0 0 0 -10"></TextBlock> <TextBlock FontSize="40" Text="總數" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0 -10 0 0">
</TextBlock> </StackPanel> </Border>
這段代碼是設置Border的Background為一個Ellipse,然后再在這個Ellipse上面放置兩個TextBlock控件,本質上Background屬性屬於Brush類型,而我們的VisualBrush剛好繼承自這個類型,我們來看一看VisualBrush的繼承關系:
System.Windows.Threading.DispatcherObject
System.Windows.DependencyObject
System.Windows.Media.Animation.Animatable
System.Windows.Media.TileBrush
System.Windows.Media.VisualBrush
所以在上面的代碼中我們可以設置Border的Background為VisualBrush,我們在很多地方都是可以使用VisualBrush的,這里需要我們平時在使用的時候不斷去反思去總結。