自定义控件未显示

时间:2012-04-04 13:36:36

标签: wpf xaml custom-controls amcharts

我在显示自定义控件时遇到了一些麻烦。当页面加载时它不可见,但只要我调整窗口大小就会出现。

这是我正在使用的代码:

<UserControl x:Class="KinectBewegingsanalyse.View.UserAnalysisChartView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:c="http://schemas.amcharts.com/stock/wpf/2009/xaml"
         mc:Ignorable="d"
         d:DesignWidth="800" d:DesignHeight="600">

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Resources/Styles.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>

<Grid>
    <c:StockChart Name="test" Visibility="Visible" PeriodSelectorVisibility="Hidden" IsEquallySpaced="False" Margin="12">
        <c:StockChart.Charts>
            <c:Chart PlotAreaBorderBrush="{StaticResource TassBlue}" PlotAreaBorderThickness="1">
                <c:Chart.DateTimeAxis>
                    <c:DateTimeAxis ValuesEnabled="True" Stroke="Transparent" StrokeThickness="0" />
                </c:Chart.DateTimeAxis>
                <c:Chart.LeftValueAxis>
                    <c:ValueAxis ValuesFormatString="0°" Stroke="Transparent" StrokeThickness="0" />
                </c:Chart.LeftValueAxis>
                <c:Chart.Graphs>
                    <c:Graph GraphType="Line" BulletType="RoundOutline" BulletSize="8" LegendItemType="Value" LegendValueLabelText="Gemeten waarde: " LegendValueFormatString="0°" LegendPeriodItemType="Value" />
                </c:Chart.Graphs>

                <c:Chart.Legend>
                    <c:Legend PositiveValueForeground="Black" NegativeValueForeground="Black" IsDateVisible="True" HideDateOnPeriod="False" />
                </c:Chart.Legend>
            </c:Chart>
        </c:StockChart.Charts>

        <c:StockChart.DataSets>
            <c:DataSet Brush="{StaticResource TassMagenta}" ItemsSource="{Binding PerformedAnalysis}" DateMemberPath="Date" ValueMemberPath="Angle" />
        </c:StockChart.DataSets>
    </c:StockChart>
</Grid>

我正在使用的customc控件是来自amCharts(amCharts website)的StockChart。

提前致谢!

Jeroen Corsius

更新1: 因此,包含自定义控件的Grid的宽度和高度为“NaN”。设置网格的宽度和高度不会改变任何内容。

更新2: 我尝试通过执行以下操作之一触发图表刷新:

  • base.InvalidateVisual();
  • base.UpdateLayout();
  • grid.UpdateLayout();
  • grid.InvalidateVisual();
  • Chart.Focus();
  • Chart.UpdateLayout();
  • Chart.InvalidateVisual();
  • Chart.Refresh();

一切都没有任何结果。

更新3: 在按钮点击事件上执行Chart.Refresh();时,图表会显示。

3 个答案:

答案 0 :(得分:2)

尝试在图表上添加以下事件:Loaded="Chart_Loaded",在事件处理程序中添加以下规则:Chart.Refresh();

祝你好运!

答案 1 :(得分:2)

使用snoop检查可视树并查看树被破坏的位置。

答案 2 :(得分:0)

确保自定义控件或包含它的内容没有将minwidth设置为零。当工作室或混合添加minwidth = 0作为默认值时,我在Silverlight中发生了完全相同的事情。