1
我正在使用ColorPicker控件,並決定最好將其組成原始控件,以便能夠重新排列控件模板中的各種滑塊和色輪,而無需重新定義所有內容。 (也控制代碼將變得相當凌亂)WPF:實現可縮放的自定義控件
我已經創建了一個新的模板Slider
控制,我希望它是可擴展的。目前,拇指的大小是固定的,中心「軌道」也是如此。使控制可擴展
<Style x:Key="ColorSlider" TargetType="{x:Type Slider}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Slider}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Rectangle Grid.Column="1" Width="80" Height="480" VerticalAlignment="Center" HorizontalAlignment="Center">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="White" Offset="0.0"/>
<GradientStop Color="Black" Offset="1.0"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Track x:Name="PART_Track">
<Track.Thumb>
<Thumb x:Name="ValueThumb">
<Thumb.Style>
<Style TargetType="Thumb">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Canvas Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
<Rectangle Width="100" Height="20" Fill="Transparent"/>
<Polygon Points="0,0 0,20 10,10" Fill="Black" />
<Polygon Points="100,0 100,20 90,10" Fill="Black" />
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Thumb.Style>
</Thumb>
</Track.Thumb>
</Track>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
一種方法是使用一個Grid
然而這卻會導致混亂,以及因爲拇指必須超過3列延伸,那麼這將是很難得到拇指的權利比例。
是否有任何使控件可擴展的最佳實踐?例如,Viewbox只會放大結果並可能降低視覺質量。有沒有其他方法可以使用?
更新1:爲了解決意見:這裏是使用網格的例子:
<Style x:Key="ColorSlider" TargetType="{x:Type Slider}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Slider}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" MinHeight="5" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" MinHeight="5" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="10" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" MinWidth="10" />
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="1" Grid.Row="1">
<Rectangle.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
<GradientStop Color="White" Offset="0.0"/>
<GradientStop Color="Black" Offset="1.0"/>
</LinearGradientBrush>
</Rectangle.Fill>
</Rectangle>
<Track x:Name="PART_Track" Grid.Column="0" Grid.ColumnSpan="3" Grid.Row="0" Grid.RowSpan="2">
<Track.Thumb>
<Thumb x:Name="ValueThumb">
<Thumb.Style>
<Style TargetType="Thumb">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
<Canvas Width="{TemplateBinding Width}" Height="{TemplateBinding Height}">
<Rectangle Height="20" Fill="Transparent"/>
<Polygon Points="0,0 0,20 10,10" Fill="Black" />
<Polygon Points="100,0 100,20 90,10" Fill="Black" />
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Thumb.Style>
</Thumb>
</Track.Thumb>
</Track>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然而,這仍然無法擴展拇指三角形還有一個視覺問題,對此我不知道它如何才能在XAML中解決。也就是說,拇指延伸到酒吧底部。
更新2:爲了使問題更具體,希望少「的意見爲主」,這個問題可以重新到:
沒有一個有提供了哪些選項,使一個組成控制上面的各個部分和示例尤其可擴展。
裝飾器可以是你的選擇在這裏。其次,viewbox可能不會降低質量,除非您擁有柵格內容。 – pushpraj 2014-08-28 14:05:04
在希望控件增長的位置使用具有*大小的行和列的網格。爲什麼這個「雜亂」和「很難得到拇指的比例」? – 2014-08-28 14:06:38
你的問題是這個網站的主題,因爲它主要是基於意見:*許多好問題根據專家經驗產生一定程度的意見,但對這個問題的回答往往幾乎完全基於意見,而不是事實,參考,或具體的專業知識。*如果您不編輯它以減少意見,那麼Stack Overflow社區將投票結束它。 – Sheridan 2014-08-28 14:22:52