Пользовательский элемент управления не отображается

У меня возникли проблемы с отображением пользовательского элемента управления. Когда страница загружается, ее не видно, но как только я изменяю размер окна, она появляется.

Вот код, который я использую:

<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>

The customc control I'm using is a StockChart from amCharts (amCharts website).

Заранее спасибо!

Йерун Корсиус

Обновление 1: Таким образом, сетка, содержащая настраиваемый элемент управления, имеет ширину и высоту «NaN». Настройки ширины и высоты сетки ничего не меняют.

Обновление 2. я попытался запустить обновление диаграммы, выполнив одно из следующих действий:

  • base.InvalidateVisual();
  • base.UpdateLayout();
  • сетка.ОбновлениеМакета();
  • сетка.InvalidateVisual();
  • Диаграмма.Фокус();
  • График.ОбновлениеМакета();
  • Диаграмма.InvalidateVisual();
  • Диаграмма.Обновить();

Все без результата.

Обновление 3: при выполнении Chart.Refresh(); в событии нажатия кнопки отображается диаграмма.


person Jeroen Corsius    schedule 04.04.2012    source источник
comment
Можете ли вы показать пример окна, где вы его используете?   -  person Tom Kerkhove    schedule 04.04.2012
comment
Я использую MVVM, поэтому приведенный выше код загружается в ItemsControl в моем MainWindow.xaml: <ContentControl Margin="0, 100, 0, 0" Content="{Binding ViewModel}" />   -  person Jeroen Corsius    schedule 04.04.2012
comment
А где ваш шаблон данных?   -  person Danny Varod    schedule 05.04.2012
comment
Он определен во внешнем файле следующим образом: <DataTemplate DataType="{x:Type vm:UserAnalysisChartViewModel}"> <v:UserAnalysisChartView /> </DataTemplate>   -  person Jeroen Corsius    schedule 05.04.2012


Ответы (3)


Попробуйте добавить на график следующее событие: Loaded="Chart_Loaded", добавьте в обработчик события следующее правило: Chart.Refresh();.

Удачи!

person Velth    schedule 05.04.2012

Используйте snoop, чтобы проверить визуальное дерево и увидеть, где дерево сломано.

person Danny Varod    schedule 05.04.2012
comment
Я использовал шпион Silverlight, мне нравится ваш ответ. +1 - person ΩmegaMan; 05.04.2012
comment
Я не могу найти никаких проблем в визуальном дереве. Как только я нажимаю пользовательский элемент управления в TreeView (из Snoop), он также появляется в моем приложении. - person Jeroen Corsius; 05.04.2012
comment
Это похоже на проблему с лицензией. Используемый вами элемент управления является коммерческим? - Если да, включили ли вы файл licx в проект пользовательского интерфейса? - person Danny Varod; 05.04.2012
comment
Нет, элемент управления находится под лицензией Linkware. Это означает, что его можно использовать до тех пор, пока вы оставляете ссылку видимой. См. ссылку. - person Jeroen Corsius; 06.04.2012
comment
Затем проверьте ширину и высоту в snoop, возможно, какая-то привязка управления переопределяет ее. - person Danny Varod; 06.04.2012
comment
Как только я нажимаю элемент управления в дереве (внутри Snoop), элемент управления становится видимым. Поэтому я не вижу никакого возможного способа проверить ширину/высоту и предотвратить ее отображение. Надеюсь, вы понимаете, что я имею в виду. - person Jeroen Corsius; 10.04.2012
comment
Попробуйте щелкнуть только элемент над ним и над ним в визуальном дереве. - person Danny Varod; 10.04.2012
comment
Элемент непосредственно над ним представляет собой сетку, его ширина и высота равны «NaN». Установив для них значение «Авто» или фактические значения, они все равно не отображаются. - person Jeroen Corsius; 10.04.2012
comment
@DannyVarod: Отличный ответ, еще один в моем случае, у меня не было элементов управления в визуальном дереве, что заставило меня понять, что я забыл применить свой собственный шаблон. - person Ian; 28.05.2012

Убедитесь, что у вас не установлено значение minwidth равным нулю ни в пользовательском элементе управления, ни в содержащем его элементе. Точно то же самое произошло со мной в Silverlight, когда студия или бленд добавили minwidth=0 по умолчанию.

person ΩmegaMan    schedule 05.04.2012
comment
На этой странице у меня нет набора minWidth, но спасибо за подсказку. - person Jeroen Corsius; 05.04.2012