Как измерить холст с автоматической высотой и шириной - PullRequest
6 голосов
/ 18 марта 2010

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

Я нашел интересный элемент управления откидной створкой от Silverlight Slide Control и теперь я пытаюсь использовать его в своем проекте. Чтобы слайд работал правильно, я должен поместить пользовательский элемент управления на холст. Пользовательский элемент управления затем использует для себя высоту своего содержимого. Я просто хочу изменить это поведение, чтобы высота была равна доступному пространству от родительского холста.

Вы видите uxBorder, где установлена ​​высота. Как я могу измерить фактическую высоту и установить ее на границе?

Я пробовал это с Height={Binding ElementName=notificationCanvas, Path=ActualHeight}, но это свойство зависимости не имеет обратного вызова, поэтому фактическое значение высоты никогда не устанавливается.

То, чего я хочу добиться, - это пользовательский контроль, такой как твиттер, для каждого примера на Блог Джесси Либерти

Извините за мой английский, надеюсь, вы понимаете мой вопрос.

<Canvas x:Name="notificationCanvas" Background="Red">
            <SlideEffectEx:SimpleSlideControl GripWidth="20" GripTitle="Task"  GripHeight="100">
                <Border x:Name="uxBorder"
                  BorderThickness="2"
                  CornerRadius="5"
                  BorderBrush="DarkGray"
                  Background="DarkGray"
                  Padding="5" Width="300"
                  Height="700"
                  >
                    <StackPanel>
                        <TextBlock Text="Tasks"></TextBlock>
                        <Button x:Name="btn1" Margin="5" Content="{Binding ElementName=MainBorder, Path=Height}"></Button>
                        <Button x:Name="btn2" Margin="5" Content="Second Button"></Button>
                        <Button x:Name="btn3" Margin="5" Content="Third Button"></Button>
                        <Button x:Name="btn1_Copy" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy1" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy2" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy3" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy4" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy5" Margin="5" Content="First Button"/>
                        <Button x:Name="btn1_Copy6" Margin="5" Content="First Button"/>
                    </StackPanel>
                </Border>
            </SlideEffectEx:SimpleSlideControl>

Ответы [ 2 ]

1 голос
/ 28 апреля 2010

Я думаю, что свойства ActualWidth или ActualHeight не могут быть установлены только gettable.

Для этого вы не сможете использовать привязку, возможно, если вы создадите элемент после загрузки страницы, поскольку фактический размер холста на момент создания будет неизвестен.

Почему бы вам не попробовать создать для этого Свойство с двухсторонним связыванием, подписать событие Canvas в layoutUpdated и обновить значение свойства, обновив, таким образом, все зависимые объекты.
I Don 'Чтобы узнать, является ли это событие правильным, проверьте, поможет ли оно вам.

1 голос
/ 18 марта 2010

Эй, пара вещей:

  • Я предполагаю, что это просто опечатка, но: "{Binding ElementName = MainBorder, Path = Height}" должно быть "{Binding ElementName = uxBorder, Path = Height}" (или ActualHeight)
  • Появляется эффект SlideEffect для настройки геометрии клипа, который будет влиять на то, насколько «большим» он выглядит

    RectangleGeometry clipRect = new RectangleGeometry();

    clipRect.Rect = new Rect(0, 0, panel.ActualWidth, host.Height);

    host.Clip = clipRect;

Если вы закомментируете вышеприведенные строки из ползунка, вы увидите заметное изменение размера панели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...