PDA

View Full Version : سوال: مشکل در تغییر Foreground اکثر کنترل ها



PetekDincos
چهارشنبه 25 خرداد 1390, 10:49 صبح
با سلام
من در تغییر Foreground اکثر کنترل ها مثل Menu, ComboBoxItem,GridViewHeader و غیره مشکل دارم و نمی دونم ایراد کارم کجاست مثلا در رویداد IsMouseOver کنترل GridViewColumnHeader که استایلش به صورت زیر است می خوام Foreground رو از White به Black تغییر بدم اما نمی شه


<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Background" Value="{x:Null}"/>
<Setter Property="BorderBrush" Value="{x:Null}"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="2,0,2,0"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GridViewColumnHeader}">
<Grid x:Name="grid" SnapsToDevicePixels="true">
<Grid x:Name="HeaderBorder">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Border x:Name="border" Padding="{TemplateBinding Padding}" Grid.RowSpan="2" Margin="0,0,0,2" Background="{DynamicResource 1-BackgroundBrush04}" BorderBrush="#FFF52929"/>
<Border x:Name="Glow" BorderBrush="{x:Null}" BorderThickness="0" Margin="0" Grid.RowSpan="2" OpacityMask="{x:Null}">
<Border.Background>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="White" Offset="0"/>
<GradientStop Offset="1"/>
<GradientStop Color="Transparent" Offset="0.5"/>
<GradientStop Offset="0.515"/>
</LinearGradientBrush>
</Border.Background>
</Border>
<ContentPresenter x:Name="HeaderContent" Margin="2,0" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" Grid.RowSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</Grid>
<Canvas>
<Thumb x:Name="PART_HeaderGripper" Style="{StaticResource GridViewColumnHeaderGripper}" Foreground="{DynamicResource 1-TextColor01}" Background="{x:Null}"/>
</Canvas>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" TargetName="PART_HeaderGripper" Value="Transparent"/>
<Setter Property="BorderBrush" TargetName="Glow" Value="{x:Null}"/>
<Setter Property="BorderBrush" TargetName="border" Value="{x:Null}"/>
<Setter Property="Background" TargetName="border" Value="{DynamicResource 1-BorderBrush03}"/>
<Setter Property="Foreground" Value="Black"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" TargetName="Glow">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,0" StartPoint="0.5,1">
<GradientStop Color="White" Offset="0"/>
<GradientStop Offset="1"/>
<GradientStop Color="Transparent" Offset="0.5"/>
<GradientStop Offset="0.515"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="Height" Value="Auto">
<Setter Property="MinHeight" Value="20"/>
<Setter Property="MinHeight" TargetName="grid" Value="25"/>
<Setter Property="Background" TargetName="Glow">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#CCFFFFFF" Offset="0"/>
<GradientStop Offset="1"/>
<GradientStop Color="#7FFFFFFF" Offset="0.5"/>
<GradientStop Offset="0.515"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="Opacity" TargetName="Glow" Value="1"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource 1-EnableFalseTextColor01}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

ممنون می شم راهنماییم کنید با تشکر

مهدی فرزاد
چهارشنبه 25 خرداد 1390, 11:29 صبح
سلام
اشکال شما اینه که این کار رو درون <ControlTemplate> انجام میدید

بای قبل از اون و در زیر تگ <Style> انجام بدید
مثلا
<Style TargetType="{x:Type DataGridColumnHeader}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Black"/>
</Trigger>
</Style.Triggers>
<Setter Property="Foreground" Value="Red"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Grid>
<Microsoft_Windows_Themes:DataGridHeaderBorder BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" IsClickable="{TemplateBinding CanUserSort}" IsPressed="{TemplateBinding IsPressed}" IsHovered="{TemplateBinding IsMouseOver}" Padding="{TemplateBinding Padding}" SortDirection="{TemplateBinding SortDirection}" SeparatorBrush="{TemplateBinding SeparatorBrush}" SeparatorVisibility="{TemplateBinding SeparatorVisibility}">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Microsoft_Windows_Themes:DataGridHeaderBorder>
<Thumb x:Name="PART_LeftHeaderGripper" HorizontalAlignment="Left" Style="{StaticResource ColumnHeaderGripperStyle}"/>
<Thumb x:Name="PART_RightHeaderGripper" HorizontalAlignment="Right" Style="{StaticResource ColumnHeaderGripperStyle}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>


</Style>

اگر از Blend استفاده کنید بسیار کار شما راحت تر میشه در Blend قبل از اینکه وارد ویرایش استایل بشید مثل شکل زیر این کار رو انجام بدید
71192