the_king
مدیرکل انجمن
خیلی ممنون استاد
الان یه همچین چیزی توی resource نوشتم :
XML:<Style x:Key="DarkStyle"> <Style.Resources> <Style TargetType="CheckBox"> <Setter Property="Template" Value="{DynamicResource checkBoxCustTemplate}"/> </Style> </Style.Resources> </Style> <Style x:Key="LightStyle"> <Style.Resources> <Style TargetType="CheckBox"> <Setter Property="Template" Value="{DynamicResource checkBoxCustTemplate}"/> </Style> </Style.Resources> </Style> <ControlTemplate x:Key="checkBoxCustTemplate" TargetType="{x:Type CheckBox}"> <!--برای این ، به پروپرتیِ Background شی Grid مقدار میدیم تا null نباشه وگرنه مشکل Hit Test بوجود میاد و در پشت زمینه ی خالیِ Border اگه کلیک شه ، تیک ای زده نمیشه--> <Grid Background="Transparent"> <Grid.ColumnDefinitions> <ColumnDefinition Width="16"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Border Name="checkBorder" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="16" Height="16" CornerRadius="1" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1"> <Path x:Name="tickPath" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1" Fill="{TemplateBinding BorderBrush}" StrokeStartLineCap="Triangle" StrokeEndLineCap="Triangle" Data="M1,7 Q3,7 5,9 Q8,4 12,2 M1,7 Q3.2,7.2 5,11 Q8.2,4.2 12,2"/> </Border> <ContentPresenter Grid.Column="1" Margin="4, 0, 0, 0"/> </Grid> <ControlTemplate.Triggers> <Trigger Property="IsChecked" Value="false"> <Setter TargetName="tickPath" Property="Visibility" Value="Hidden"/> </Trigger> </ControlTemplate.Triggers> </ControlTemplate>
اما مشکل بزرگم اینه که همونطور که قبلا توضیح دادم ، نمیدونم چجوری از قسمت Style هایی که تعریف کردم (همون DarkStyle و LightStyle) ، به اون Border ای (بنام checkBorder) که در اون template تعریف کردم (از درون اون Style ها) دسترسی داشته باشم تا Background ئه مربوط به اون Border را در DarkStyle ، مقدار سیاه بدم و همچنین Background ئه مربوط به اون Border را در LightStyle، مقدار روشن تر بدم؟
این قضیه را چجوری باید درست کنم و کد را به چه صورتی باید بنویسم؟
XML:
<Style x:Key="DarkStyle">
<Style.Resources>
<Style TargetType="CheckBox">
<Setter Property="Template" Value="{DynamicResource checkBoxCustTemplate}"/>
<Setter Property="Background" Value="Black"/>
</Style>
</Style.Resources>
</Style>
<Style x:Key="LightStyle">
<Style.Resources>
<Style TargetType="CheckBox">
<Setter Property="Template" Value="{DynamicResource checkBoxCustTemplate}"/>
<Setter Property="Background" Value="LightGray"/>
</Style>
</Style.Resources>
</Style>
XML:
<Border Name="checkBorder" Background="{TemplateBinding Background}" Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="16" Height="16" CornerRadius="1" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="1">
<Path x:Name="tickPath" Stroke="{TemplateBinding BorderBrush}" StrokeThickness="1" Fill="{TemplateBinding BorderBrush}" StrokeStartLineCap="Triangle" StrokeEndLineCap="Triangle" Data="M1,7 Q3,7 5,9 Q8,4 12,2 M1,7 Q3.2,7.2 5,11 Q8.2,4.2 12,2"/>
</Border>