わかりましたので、ここに問題があります。これを機能させる方法を見つけようとしています:
カスタム ボタンを作成するには、次の ControlTemplate を検討してください。
<ControlTemplate x:Key ="cButton" TargetType="{x:Type Button}">
<!--Styles-->
<Grid x:Name="bkg">
<Grid.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="{TemplateBinding Background}" Offset="0.5"/><!-- Error! -->
<GradientStop Color="White" Offset="1.0"/>
</LinearGradientBrush>
</Grid.Background>
<ContentPresenter
TextBlock.FontSize="80"
HorizontalAlignment="Center"
VerticalAlignment="Center"
ContentSource="Content" />
</Grid>
<!--Triggers-->
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bkg" Property="Background" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
このコントロール テンプレートはこのスクリプトの一部を形成し、ご覧のとおり、メイン グリッドで概説されているボタン宣言から背景色を取得しようとしています。
<Grid>
<Grid.Resources>
<ControlTemplate x:Key ="cButton" TargetType="{x:Type Button}">
<!--Styles-->
<Grid x:Name="bkg">
<Grid.Background>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="{TemplateBinding Background}" Offset="0.5"/><!-- Error! -->
<GradientStop Color="White" Offset="1.0"/>
</LinearGradientBrush>
</Grid.Background>
<ContentPresenter
TextBlock.FontSize="80"
HorizontalAlignment="Center"
VerticalAlignment="Center"
ContentSource="Content" />
</Grid>
<!--Triggers-->
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="bkg" Property="Background" Value="White"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Grid.Resources>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions >
<Button Name="btnIn" Grid.Column="0" Content="IN" Background="Green" Foreground="White" Template="{StaticResource cButton}"/>
<Button Name="btnOut" Grid.Column="1" Content="OUT" Background="Red" Foreground="White" Template="{StaticResource cButton}" />
</Grid>
さて、主な質問はこれです..
質問 1: templatebinding を使用して背景色を取得しないボタンの ControlTemplate でエラー コメントがマークされている行が表示されるのはなぜですか? 無地を使用していれば問題なく機能していたので、この方法で機能しない理由はわかりません. また、その理由を教えてください。
以下はまだ少し不明確であり、それらが問題に関連しているかどうかはわかりません。誰かがそれらをクリアできれば、それは素晴らしいことです.
質問 2: これら 2 つの TargetType 値 "Button" と "{x:Type Button}" の違いは何ですか。それらが同等のタイプであることは知っていますが、2つに違いはありますか? MSDN を読みましたが、実際の違いはそれほど明確ではありません。
質問 3: いつ x:Name を使用し、いつ Name を使用しますか? 違いはまた不明です。
質問 4: x:Static は何をしますか?