Привязка Viewbox к холсту - PullRequest
1 голос
/ 23 мая 2010

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

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

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

Ответы [ 2 ]

2 голосов
/ 23 мая 2010

Откуда ты знаешь, что это работает? A Canvas - это просто Panel с нулевой шириной / высотой. Даже если у него есть дети, его размеры все равно будут 0,0. Вы должны явно установить Width и Height в ненулевое значение, чтобы оно появилось. Вставьте следующий фрагмент в XamlPad или просто протестируйте в своем приложении. Теперь удалите либо Width, либо Height, и оно исчезнет.

<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>
0 голосов
/ 23 мая 2010

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

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

TextBlock tb = new TextBlock();
tb.SetValue(Canvas.LeftProperty, 5);
tb.SetValue(Canvas.TopProperty, 5);

«5» не является допустимым значением для «Left» или «Top». Это, конечно, должно быть

TextBlock tb = new TextBlock();
tb.SetValue(Canvas.LeftProperty, 5.0);
tb.SetValue(Canvas.TopProperty, 5.0);

И поскольку он был создан как часть привязки данных, диалог исключений не отображался. В общем ... DOOOOH :-) : -)

...