Silverlight, при вращении текстового поля отображается не весь текст - PullRequest
2 голосов
/ 09 ноября 2011

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

Проблема в том, что, когда текст находится в вертикальном положении, текст не отображается полностью, я ищу ответ и понимаю, что это связано с тем, как silverlight обновляет макет.Вот мой код

private void CollapseControl()
{
    CollapseCommand.Content = "E";            
    CollapseCommand.Margin = _btnMarginOnCollapse;

    BtnZoomIn.Visibility = Visibility.Collapsed;
    BtnZoomOut.Visibility = Visibility.Collapsed;
    ScrollViewerStackPanel.Visibility = Visibility.Collapsed;
    ZoomPanel.Visibility = Visibility.Collapsed;

    this.HorizontalAlignment = HorizontalAlignment.Left;
    this.Width = 40;

    RotateTransform nameRotateTransform = new RotateTransform();
    nameRotateTransform.Angle = 270;            
    Nametb.RenderTransform = nameRotateTransform;            
    Nametb.VerticalAlignment = VerticalAlignment.Bottom;
    Nametb.Height = Nametb.Width;
    Nametb.Width = Nametb.Height;
    Nametb.UpdateLayout();

}

Ответы [ 3 ]

3 голосов
/ 09 ноября 2011

Одним из решений было бы использование элемента управления LayoutTransformer из набора инструментов Silverlight .

. Вы оборачиваете существующий текстовый блок внутри LayoutTransformer

        <toolkit:LayoutTransformer x:Name="Namelt" ...>
            <toolkit:LayoutTransformer.LayoutTransform>
                <RotateTransform />
            </toolkit:LayoutTransformer.LayoutTransform>
            <TextBlock x:Name="Nametb" Text="Hello World" />
        </toolkit:LayoutTransformer>

Тогда ваш код выглядит так: -

((RotateTransform)Namelt.LayoutTransform).Angle = 270;                         
Namelt.VerticalAlignment = VerticalAlignment.Bottom;     
Namelt.Height = Nametb.Width;     
Namelt.Width = Nametb.Height;  
0 голосов
/ 19 сентября 2013

Я только что написал следующее, и моя похожая проблема решена.

layoutTransform.VerticalAlignment = VerticalAlignment.Bottom;
layoutTransform.VerticalAlignment = VerticalAlignment.Center;
0 голосов
/ 29 марта 2012

Я только недавно столкнулся с подобной проблемой и нашел следующее решение (на основе сообщения на форумах Silverlight ), которое также должно помочь с вашей проблемой:

private void CollapseControl()
{
    CollapseCommand.Content = "E";
    CollapseCommand.Margin = _btnMarginOnCollapse;

    BtnZoomIn.Visibility = Visibility.Collapsed;
    BtnZoomOut.Visibility = Visibility.Collapsed;
    ScrollViewerStackPanel.Visibility = Visibility.Collapsed;
    ZoomPanel.Visibility = Visibility.Collapsed;

    this.HorizontalAlignment = HorizontalAlignment.Left;

    LayoutTransform lt = new LayoutTransform();
    lt.Content = Nametb;

    RotateTransform nameRotateTransform = new RotateTransform();
    nameRotateTransform.Angle = 270;

    lt.LayoutTransform = nameRotateTransform;
    lt.ApplyLayoutTransform();
    Nametb.UpdateLayout();
}
...