Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Запретить трансформацию "детей"


Автор: San4o_Pan4o 21.3.2009, 16:45
Есть Grid, а где-то внутри него есть еще Label с текстом. К Grid'у я применяю ScaleTransform и в результате лэйбл тоже растет/уменьшается, а мне бы хотелось его в покое оставить.. Такое возможно? Как? Спасибо.  smile 

Автор: dazy 21.3.2009, 20:21
Как растет? Шрифт увеличивается или границы лейбла?

Автор: San4o_Pan4o 21.3.2009, 22:52
Цитата

Как растет? Шрифт увеличивается или границы лейбла? 

шрифт

Автор: dazy 22.3.2009, 09:46
Наверное так и должно быть.
Ведь ScaleTransform, это что-то типа увеличительного стекла.
Может просто изменять физические размеры таблицы вместо масштабирования. Мне кажется так проще будет.

Автор: Mikant 22.3.2009, 14:04
у УИэлемента есть не только маргины, а еще и предпочтительные размеры. фиксируя их - избегаешь растяжения/сжатия

Автор: Idsa 22.3.2009, 14:11
Еще, думаю, сработает, если свойству трансформации лэйбла присвоить null (если в разметке, - {x:Null}).

Автор: San4o_Pan4o 23.3.2009, 17:22
Цитата

Наверное так и должно быть.
Ведь ScaleTransform, это что-то типа увеличительного стекла.
Может просто изменять физические размеры таблицы вместо масштабирования. Мне кажется так проще будет. 

Логично, что так и должно быть, вопрос в том, можно ли этого избежать? Просто изменять физические размеры вроде накладнее по ресурсам..

Цитата

у УИэлемента есть не только маргины, а еще и предпочтительные размеры. фиксируя их - избегаешь растяжения/сжатия 

Пробовал и Width/Height, и MaxWidth/MaxHeight - ноль эффекта, если ты о них говорил.

Цитата

Еще, думаю, сработает, если свойству трансформации лэйбла присвоить null (если в разметке, - {x:Null}). 

Не уверен, что понял, что ты имеешь в виду.

Вот моя разметка:
Код

<DataTemplate DataType="{x:Type local:Photo}">
             <DataTemplate.Resources>
                 <Storyboard x:Key="TouchItem">
                     <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="border" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
                         <SplineDoubleKeyFrame KeyTime="00:00:00" Value="-1"/>
                         <SplineDoubleKeyFrame KeyTime="00:00:00.1000000" Value="1"/>
                         <SplineDoubleKeyFrame KeyTime="00:00:00.2000000" Value="-1"/>
                         <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
                     </DoubleAnimationUsingKeyFrames>
                 </Storyboard>
             </DataTemplate.Resources>
                <Border Padding="1,1,1,1" BorderThickness="1" VerticalAlignment="Center" CornerRadius="5,5,5,5" Background="#FF000000" Margin="3,3,3,3" x:Name="border" RenderTransformOrigin="0.5,0.5"  Tag="{Binding Path=FullPath}"  MouseLeftButtonDown="Item_MouseLeftButtonDown">
                    <Border.RenderTransform>
                        <TransformGroup>
                            <ScaleTransform ScaleX="1" ScaleY="1"/>
                            <SkewTransform AngleX="0" AngleY="0"/>
                            <RotateTransform Angle="0"/>
                            <TranslateTransform X="0" Y="0"/>
                        </TransformGroup>
                    </Border.RenderTransform>
                <Border.BitmapEffect>
                    <DropShadowBitmapEffect Color="#FFFFFFFF" Direction="310" Opacity="0.44" ShadowDepth="4" Softness="0.22" />
                </Border.BitmapEffect>
                <Grid  VirtualizingStackPanel.IsVirtualizing="True" Width="100"
                  VirtualizingStackPanel.VirtualizationMode="Recycling" Margin="5" VerticalAlignment="Center">
                    <Grid.LayoutTransform>
                                        <ScaleTransform ScaleX="{Binding Path=Value, ElementName=Zoomer}" ScaleY="{Binding Path=Value, ElementName=Zoomer}" />
                    </Grid.LayoutTransform>
                    <StackPanel Margin="1" VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling" VerticalAlignment="Center" Background="Black">
                                        <StackPanel.ToolTip>
                                        <ToolTip Style="{StaticResource ToolTipStyle}" >
                                            <StackPanel Background="Black" HorizontalAlignment="Left" VerticalAlignment="Center">
                                                <Label HorizontalAlignment="Center" Foreground="White" Content="{Binding Path=FileName}"/>
                                            </StackPanel>
                                            </ToolTip>
                                    </StackPanel.ToolTip>
                                        <Image Source="{Binding Path=Source, Converter={StaticResource LocalUriToImageConverter}}" 
                               VirtualizingStackPanel.IsVirtualizing="True" 
                                VirtualizingStackPanel.VirtualizationMode="Recycling"/>
                    <Label HorizontalContentAlignment="Center" FontSize="10" Foreground="White" Content="{Binding Path=FileName}" >
                   </StackPanel>
                 </Grid>
                </Border>
             <DataTemplate.Triggers>
                 <EventTrigger RoutedEvent="Mouse.MouseEnter">
                     <BeginStoryboard Storyboard="{StaticResource TouchItem}"/>
                 </EventTrigger>
             </DataTemplate.Triggers>
            </DataTemplate>

Автор: dazy 23.3.2009, 18:13
- Вывести label из грида во вне. 
- Отрицательным margin добиться, чтобы label был как бы внутри грида.
- Все это взять в еще один общий грид.

Т.о. визуально label будет внутри грида, но не будет его "ребенком".

Автор: San4o_Pan4o 23.3.2009, 18:34
Цитата

- Вывести label из грида во вне. 
- Отрицательным margin добиться, чтобы label был как бы внутри грида.
- Все это взять в еще один общий грид.

Т.о. визуально label будет внутри грида, но не будет его "ребенком". 

хм, хитрый ход.. Я так в свое время в CSS делалsmile Спасибоsmile Возьму на заметку пока, вдруг можно блочить все-таки трансформации.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)