Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Label неправильно сообщает свой размер. 
:(
    Опции темы
Seekeer
Дата 1.4.2011, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.12.2007

Репутация: нет
Всего: нет



Необходимо сделать контрол, чтобы получить подобный коллаут:
user posted image
Проблема в том, что он может быть использован для отображения разного количества текста. Так что ширина у него должна быть фиксированная, а высота такая, чтобы поместился весь текст. Проблема в том, что лейбл неправильно возвращает свою высоту, в связи с чем не получается нормально нарисовать вокруг него прямоугольник. Пробовал заменить лейбл на textblock - та же история.
 Вот то, что я написал:
Код

<Popup x:Class="Controls.Callout"
        x:ClassModifier="internal"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" >
    <Grid>
        <Image>
            <Image.Source>
                <DrawingImage>
                    <DrawingImage.Drawing >
                        <GeometryDrawing Brush="Orange" x:Name="geometryDrawing">
                            <GeometryDrawing.Pen>
                                <Pen Brush="Black" Thickness="2"/>
                            </GeometryDrawing.Pen>
                            <GeometryDrawing.Geometry>
                                <CombinedGeometry GeometryCombineMode="Union">
                                    <CombinedGeometry.Geometry1>
                                        <RectangleGeometry x:Name="rectangel" 
                                                                   RadiusX="15" RadiusY="15" 
                                                                       Rect="0,30, 300,100"
                                                                   />
                                    </CombinedGeometry.Geometry1>
                                    <CombinedGeometry.Geometry2>
                                        <PathGeometry>
                                            <PathFigure StartPoint="30,30" IsClosed="False">
                                                <PolyLineSegment Points="15,0, 90,30"/>
                                            </PathFigure>
                                        </PathGeometry>
                                    </CombinedGeometry.Geometry2>
                                </CombinedGeometry>
                            </GeometryDrawing.Geometry>
                        </GeometryDrawing>
                    </DrawingImage.Drawing>
                </DrawingImage>
            </Image.Source>
       </Image>
        <Label Padding="5 20"  MaxWidth="300" Name="myLabel" FontSize="16" >
                   <!--Content="{Binding}">-->
               <!--MaxHeight="100" MaxWidth="300">-->
            <AccessText TextWrapping="Wrap" MaxHeight="50"/>
        </Label>
    </Grid>
</Popup>

Код

    internal partial class Callout : Popup
    {
        public Callout()
        {
            InitializeComponent();
        }
        protected override void OnOpened(System.EventArgs e)
        {
              rectangel = new RectangleGeometry(new Rect(0,30,300, myLabel.Height/2));
        }
    }



Это сообщение отредактировал(а) Seekeer - 1.4.2011, 21:57
PM MAIL   Вверх
exBlender
Дата 5.4.2011, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 2.10.2009

Репутация: 9
Всего: 9



В XAML это делается примерно так:
Код

<Grid Width="150" HorizontalAlignment="Left" VerticalAlignment="Top">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition />
            </Grid.RowDefinitions>
            <Path Data="M8,0 L24,16 0,16 z" Fill="SteelBlue" HorizontalAlignment="Left" Margin="20,0,0,-1" Width="24" />
            <Border Grid.Row="1" Background="SteelBlue" CornerRadius="8" Padding="8">
                <TextBlock TextWrapping="Wrap" Text="ширина у него должна быть фиксированная, а высота такая, чтобы поместился весь текст."/>
            </Border>
        </Grid>

Это всё. Код только засылает нужный текст. При желании это можно вставить прямо в Label Template.
--------------------
HTML и CSS забыв как страшный сон, хвалу я заммэлу пою и фирме Майкрософт.
PM MAIL   Вверх
Rohoss
Дата 6.4.2011, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начальник интернета
***


Профиль
Группа: Завсегдатай
Сообщений: 1308
Регистрация: 9.10.2006
Где: Matrix

Репутация: 4
Всего: 18



Цитата(Seekeer @  1.4.2011,  21:31 Найти цитируемый пост)
Необходимо сделать контрол, чтобы получить подобный коллаут:

В Expression Blend такие есть...


--------------------
Файловый менеджер Explorer.Net скачать  video
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.2911 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.