Как центрировать текст вокруг точки, используя xaml - PullRequest
0 голосов
/ 15 мая 2010

Я хотел бы иметь возможность разместить слово «привет» с центром в определенной точке. Мне нужно сделать это полностью в XAML без дополнительного кода. Насколько я могу судить, все свойства / стили выравнивания текста в XAML действуют на текст в пределах некоторого ограничивающего холста или другого элемента.

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

Причина, по которой мне нужно полностью решить проблему в XAML, заключается в том, что я не использую WPF для создания XAML, я пишу его непосредственно в XML DOM. Затем он будет загружен в элемент управления Silverlight или WPF для отображения.

На большинстве графических языков, включая SVG, откуда и появился мой код, текст можно выровнять по «неподвижной точке» без ограничительной рамки.

Любые предложения приветствуются

1 Ответ

0 голосов
/ 05 февраля 2011

(Да, я знаю, что этот вопрос старый.)

Эффективность этого решения может варьироваться в зависимости от используемой вами версии Silverlight или .NET Framework, и я не пробовал его с Silverlight для Windows Phone 7. Я написал версию для автономных приложений WPF и Я написал еще одну версию, которая также работает в Silverlight.

Во-первых, версия, которая работает в Silverlight и WPF. Обратите внимание, что вам нужно будет немного реорганизовать код, если вы не используете Canvas, чтобы обеспечить абсолютную позицию для центра вашего TextBlock. Например, вы можете использовать TranslateTransform для позиционирования текста.

<Canvas>
    <Canvas.Resources>
        <ScaleTransform x:Key="transform" ScaleX="-1" ScaleY="-1" />
    </Canvas.Resources>

    <Grid RenderTransform="{StaticResource transform}" RenderTransformOrigin="-.25 -.25">
        <TextBlock RenderTransform="{StaticResource transform}">
            Hello!
        </TextBlock>
    </Grid>

</Canvas>

Во-вторых, версия, которая работает только в WPF. Он не работает в Silverlight, поскольку зависит от наличия вложенных свойств Canvas.Right и Canvas.Bottom. UniformGrid также отсутствует в Silverlight, но этот код можно было бы заменить обычной сеткой с двумя строками и столбцами длиной в звездочку.

<Canvas>

    <UniformGrid Rows="2" Columns="2"
                DataContext="{Binding ElementName=textBox1}"
                Width="{Binding Path=ActualWidth}"
                Height="{Binding Path=ActualHeight}">
        <Canvas>
            <TextBlock Name="textBox1" Canvas.Right="0" Canvas.Bottom="0">
                Hello!
            </TextBlock>
        </Canvas>
    </UniformGrid>

</Canvas>

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

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