Наследование значений, объявленных при создании экземпляра UserControl - PullRequest
0 голосов
/ 12 августа 2011

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

В принципе, моя проблема проста для понимания.У меня есть проект Silverlight и в MainPage.xaml я объявил UserControl и дал ему высоту и ширину.

<Grid>
        <control:AlarmButton Height="50" Width="50" />
</Grid>

Теперь в AlarmButton у меня есть кнопка, которая имеет свой собственный шаблон управления, который установлентак, как я хочу.Прямо сейчас в нем есть ведущий контента.

<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    x:Class="Alarms.AlarmButton">

    <UserControl.Resources>
        <ControlTemplate x:Key="StatusButton" >
            <Viewbox Stretch="Fill">
                <Grid>
                    <Path x:Name="Base" StrokeThickness="1.0" Stroke="#ff000000" StrokeMiterLimit="1.0" Fill="#ff666666" Data="F1 M 99.500,99.500 L 0.500,99.500 L 0.500,0.500 L 99.500,0.500 L 99.500,99.500 Z"/>
                    <Path x:Name="Interior" Opacity="0.5" StrokeThickness="1.0" Stroke="#ff191919" StrokeMiterLimit="1.0" Data="F1 M 97.500,97.500 L 2.500,97.500 L 2.500,2.500 L 97.500,2.500 L 97.500,97.500 Z">
                        <Path.Fill>
                            <LinearGradientBrush MappingMode="Absolute" StartPoint="2.500,2.499" EndPoint="97.500,97.499">
                                <LinearGradientBrush.GradientStops>
                                    <GradientStop Offset="0.00" Color="#3FFFFFFF"/>
                                    <GradientStop Offset="0.151" Color="Transparent"/>
                                    <GradientStop Offset="1.00" Color="#BFFFFFFF"/>
                                    <GradientStop Color="#53FFFFFF" Offset="0.655"/>
                                </LinearGradientBrush.GradientStops>
                                <LinearGradientBrush.Transform>
                                    <MatrixTransform Matrix="1.000,0.000,-0.000,-1.000,0.000,100.000" />
                                </LinearGradientBrush.Transform>
                            </LinearGradientBrush>
                        </Path.Fill>
                    </Path>
                    <Path x:Name="LargeShader" Opacity="0.1" Fill="#ffffffff" Data="F1 M 94.667,18.667 L 94.667,94.667 L 6.333,94.667 C 6.333,94.667 94.667,67.348 94.667,18.667 Z"/>
                    <Path x:Name="SmallShader" Opacity="0.1" Fill="#ffffffff" Data="F1 M 94.667,43.667 L 94.667,94.667 L 20.333,94.667 C 20.333,94.667 94.667,76.334 94.667,43.667 Z"/>
                    <ContentPresenter x:Name="contentPresenter" Height="{TemplateBinding Height}" Width="{TemplateBinding Width}" 
                                      HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                      Margin="{TemplateBinding Padding}" 
                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Grid>
            </Viewbox>
        </ControlTemplate>
    </UserControl.Resources>

    <Grid >
        <Button Template="{StaticResource StatusButton}" >
            <TextBlock Text="this is a text box" 
                       TextTrimming="WordEllipsis" />
        </Button>
    </Grid>


</UserControl>

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

Мой вопрос таков;Возможно ли для TextBlock привязать его высоту и ширину к значениям, как объявлено в MainPage.xaml?Или это сложнее, чем я себе представляю?Есть ли лучший способ сделать это?

РЕДАКТИРОВАТЬ

Это может дать немного больше информации о том, что я пытаюсь сделать.Это моя "кнопка" с изменениями РобСиклоса

button

Ответы [ 3 ]

0 голосов
/ 12 августа 2011

Это должно работать: -

<Grid x:Name="LayoutGrid">
    <Button Template="{StaticResource StatusButton}" >
        <TextBlock Text="this is a text box" TextTrimming="WordEllipsis"
            Width="{Binding Parent.Width, ElementName=LayoutRoot}"
            Height="{Binding Parent.Height, ElementName=LayoutRoot}" />
    </Button>
</Grid>

Предполагается, что будут указаны ширина и высота. Альтернативой может быть использование события SizeChanged в UserControl для непосредственного присвоения значений ширины и высоты.

0 голосов
/ 12 августа 2011

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

Вероятно, удаление Viewbox решит проблему (или, по крайней мере, вытащит ContentPresenter из Viewbox)

0 голосов
/ 12 августа 2011

Я не уверен, что полностью понимаю. Вы пытаетесь сделать текстовый эллипс, потому что не хотите, чтобы текстовый блок увеличивался, если текст слишком большой? Если это так, вы можете использовать конвертер (в операторе связывания свойства Text), чтобы конвертер возвращал полнотекстовое значение, если текст меньше определенной длины, или чтобы конвертер отображал эллипс, если текст над ним значение.

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