Я пытаюсь связать a Viewbox
к a Canvas
это создается динамично как так:
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel>
<Viewbox>
<ContentPresenter Content="{Binding Canvas}"/>
</Viewbox>
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Это хорошо работает настолько же долго как Canvas
не имеет никаких детей, но как скоро в Canvas
имеет детей, которых это не показывают. Что я пропускаю здесь?
Откуда вы знаете, что это работает? A Canvas
- это просто Panel
с нулевой шириной / высотой. Даже если у него есть дочерние элементы, его размеры все равно будут 0,0. Вы должны явно установить Ширина
и Высота
на ненулевое значение, чтобы оно отображалось. Вставьте следующий фрагмент в XamlPad
или просто протестируйте его в собственном приложении. Теперь удалите Ширина
или Высота
, и она исчезнет.
<Viewbox>
<ContentPresenter>
<ContentPresenter.Content>
<Canvas Background="Red" Width="1" Height="1">
<TextBlock Canvas.Left="10" Canvas.Top="20" Text="123" />
</Canvas>
</ContentPresenter.Content>
</ContentPresenter>
</Viewbox>
Забудьте, что я когда-либо спрашивал :-)
Я вызвал исключение при создании дочерних элементов холста, что, в свою очередь, привело к тому, что холст не отображался. К сожалению, я не в первый раз делаю эту ошибку, и, вероятно, не в последний раз:
TextBlock tb = new TextBlock();
tb.SetValue(Canvas.LeftProperty, 5);
tb.SetValue(Canvas.TopProperty, 5);
«5» не является допустимым значением для «Слева» или «Сверху». Конечно, это должно быть
TextBlock tb = new TextBlock();
tb.SetValue(Canvas.LeftProperty, 5.0);
tb.SetValue(Canvas.TopProperty, 5.0);
И поскольку он был создан как часть привязки данных, диалоговое окно исключения не отображалось. В общем ... DOOOOH :-) : -)