4
A
回答
3
如果你看了可視化樹,你會發現,你必須改變的背景屬性網格和邊框將背景更改爲透明(下圖中以黃色突出顯示的元素)。
要做到這一點,你可以在Loaded
事件改變顏色。首先,您必須找到名稱爲ChartArea
的EdgePanel
,之後您必須更改網格和邊框的顏色。如果您還想將Legend
的背景設置爲透明,則必須找到Legend
元素並設置適當的屬性。
<DVC:Chart Canvas.Top="80" Canvas.Left="10" Name="mcChart"
Width="400" Height="250"
Background="Orange"
Loaded="mcChart_Loaded">
<DVC:Chart.Series>
<DVC:PieSeries Title="Experience"
ItemsSource="{StaticResource FruitCollection}"
IndependentValueBinding="{Binding Path=Name}"
DependentValueBinding="{Binding Path=Share}">
</DVC:PieSeries>
</DVC:Chart.Series>
</DVC:Chart>
代碼隱藏:
private void mcChart_Loaded(object sender, RoutedEventArgs e)
{
EdgePanel ep = VisualHelper.FindChild<EdgePanel>(sender as Chart, "ChartArea");
if (ep != null)
{
var grid = ep.Children.OfType<Grid>().FirstOrDefault();
if (grid != null)
{
grid.Background = new SolidColorBrush(Colors.Transparent);
}
var border = ep.Children.OfType<Border>().FirstOrDefault();
if (border != null)
{
border.BorderBrush = new SolidColorBrush(Colors.Transparent);
}
}
Legend legend = VisualHelper.FindChild<Legend>(sender as Chart, "Legend");
if (legend != null)
{
legend.Background = new SolidColorBrush(Colors.Transparent);
legend.BorderBrush = new SolidColorBrush(Colors.Transparent);
}
}
Helper類尋子元素在這種情況下EdgePanel
:
class VisualHelper
{
public static T FindChild<T>(DependencyObject parent, string childName) where T : DependencyObject
{
if (parent == null) return null;
T foundChild = null;
int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
T childType = child as T;
if (childType == null)
{
foundChild = FindChild<T>(child, childName);
if (foundChild != null) break;
}
else if (!string.IsNullOrEmpty(childName))
{
var frameworkElement = child as FrameworkElement;
if (frameworkElement != null && frameworkElement.Name == childName)
{
foundChild = (T)child;
break;
}
}
else
{
foundChild = (T)child;
break;
}
}
return foundChild;
}
}
15
WPF被設計爲允許您通過XAML式控制;不是代碼。通過樣式可以使繪圖區和圖例在餅圖中透明。不幸的是,繪圖區周圍的邊框無法使用屬性進行控制,而是必須修改整個控件模板。最後,使用樣式可能與編寫可視化樹後面的代碼一樣乏味,但對我來說至少,它仍然感覺像是一種更清晰的方法。
<chartingToolkit:Chart>
<chartingToolkit:Chart.PlotAreaStyle>
<Style TargetType="Grid">
<Setter Property="Background" Value="Transparent"/>
</Style>
</chartingToolkit:Chart.PlotAreaStyle>
<chartingToolkit:Chart.LegendStyle>
<Style TargetType="visualizationToolkit:Legend">
<Setter Property="Margin" Value="15,0"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Background" Value="Transparent"/>
</Style>
</chartingToolkit:Chart.LegendStyle>
<chartingToolkit:Chart.Style>
<Style TargetType="chartingToolkit:Chart">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="chartingToolkit:Chart">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<visualizationToolkit:Title Content="{TemplateBinding Title}" Style="{TemplateBinding TitleStyle}" />
<!-- Use a nested Grid to avoid possible clipping behavior resulting from ColumnSpan+Width=Auto -->
<Grid Grid.Row="1" Margin="0,15,0,15">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<visualizationToolkit:Legend x:Name="Legend" Title="{TemplateBinding LegendTitle}" Style="{TemplateBinding LegendStyle}" Grid.Column="1" />
<chartingprimitives:EdgePanel x:Name="ChartArea" Style="{TemplateBinding ChartAreaStyle}">
<Grid Canvas.ZIndex="-1" Style="{TemplateBinding PlotAreaStyle}" />
<!--<Border Canvas.ZIndex="10" BorderBrush="#FF919191" BorderThickness="1" />-->
</chartingprimitives:EdgePanel>
</Grid>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</chartingToolkit:Chart.Style>
<chartingToolkit:PieSeries ... />
</chartingToolkit:Chart>
的PlotAreaStyle
和LegendStyle
被改性以使它們是透明的。通過修改圖表的ControlTemplate
並簡單地註釋掉有問題的Border
元素,可以刪除繪圖區域周圍的邊框。
相關問題
- 1. WPF工具包圖表軸無法通過樣式設置
- 2. 修改WPF工具包DropDownButton樣式
- 3. WPF工具包DataGridCell樣式DataTrigger
- 4. 樣式WPF工具包DataGrid列標題
- 5. wpf工具包datetimepicker如何更改禁用樣式
- 6. WPF圖表工具包圖例位置
- 7. Wpf工具提示樣式
- 8. WPF工具包圖表 - Series.Clear後的NullReferenceException()
- 9. 綁定集合WPF工具包圖表
- 10. WPF工具包圖表控件 -
- 11. WPF工具包 - 停用圖表動畫
- 12. Wpf工具包圖表反轉高亮
- 13. WPF工具包圖表旋轉軸
- 14. WPF工具包圖表控件綁定
- 15. WPF的線圖工具包
- 16. wpf工具包散點圖
- 17. WPF中圖表工具套件的樣式活動點
- 18. 如何基於Silverlight工具包主題樣式創建樣式
- 19. WinRT XAML工具包圖表控件:如何設置圖例項目的樣式?
- 20. 關閉WPF工具包圖表控件的工具提示
- 21. 如何渲染圖表(從wpf工具包)控制屏幕?
- 22. 如何使用滾動條與WPF工具包圖表控件
- 23. WPF工具包圖表 - 可能以圖表格式顯示圖例?
- 24. Google圖表API樣式工具提示
- 25. Silverlight工具包圖表Y軸標籤樣式
- 26. wpf工具提示和樣式
- 27. 帶工具提示的Wpf TextBox樣式
- 28. 綁定字典到WPF工具包圖表
- 29. 刪除擴展WPF工具包樣式中的關閉按鈕
- 30. WPF工具包Datagrid,樣式選擇器全部
再次感謝ü這麼多... 它的工作對我來說... – 2013-03-03 11:05:08
但CorrectAns,WrongAns,NotAttended框背景並沒有改變 – 2013-03-03 11:13:09
@AvinashSingh檢查我的答案:)我改變了'Loaded'事件處理代碼來設置'傳奇'的無遺產屬性透明。 – kmatyaszek 2013-03-03 11:32:29