Привязка Viewbox к холсту

Я пытаюсь связать a Viewbox к a Canvas это создается динамично как так:

        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel>
                    <Viewbox>
                        <ContentPresenter Content="{Binding Canvas}"/>
                    </Viewbox>
                </DockPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>

Это хорошо работает настолько же долго как Canvas не имеет никаких детей, но как скоро в Canvas имеет детей, которых это не показывают. Что я пропускаю здесь?

1
задан Dave Clemmer 5 August 2011 в 20:09
поделиться

2 ответа

Откуда вы знаете, что это работает? 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>
2
ответ дан 3 September 2019 в 00:21
поделиться

Забудьте, что я когда-либо спрашивал :-)

Я вызвал исключение при создании дочерних элементов холста, что, в свою очередь, привело к тому, что холст не отображался. К сожалению, я не в первый раз делаю эту ошибку, и, вероятно, не в последний раз:

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

0
ответ дан 3 September 2019 в 00:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: