トップ回答者
RibbonRadioButtonのCheckedBackgroundブラシに、余計なハイライトがつきます

質問
-
.NetFramework 4.5 WPFのRibbonコントロールについての質問です。
RibbonRadioButtonのCheckedブラシを変更しようと、親のRibbonコントロールのCheckedBackground及びCheckedBorderブラシを変更したのですが、表題の通り橙色のハイライトが残っており、非常に見栄えの悪いものになってしまいます。
このハイライトを個別に色指定したいと思ったのですが、該当箇所が見つかりませんでした。なんとかするにはスタイルで一からボタンを作り直すしかないのでしょうか?
コードは以下となります。
<RibbonWindow x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="WpfApplication1"> <Grid> <Ribbon CheckedBorderBrush="Red" CheckedBackground="Red"> <RibbonTab Header="ホーム"> <RibbonGroup Header="テスト"> <RibbonRadioButton Label="テスト" IsChecked="True"/> </RibbonGroup> </RibbonTab> </Ribbon> </Grid> </RibbonWindow>
以上、よろしくお願いします。
回答
-
BorderThickness=0がまずいなら以下の手で、
<Grid> <Grid.RenderTransform> <ScaleTransform ScaleX="3" ScaleY="3" /> </Grid.RenderTransform> <Ribbon > <RibbonTab Header="ホーム"> <RibbonGroup Header="テスト"> <RibbonRadioButton Label="テスト" /> <RibbonRadioButton Label="テスト" CheckedBorderBrush="Red" CheckedBackground="Red"/> <RibbonRadioButton Label="テスト" CheckedBorderBrush="Red" CheckedBackground="Red" Loaded="RibbonRadioButton_Loaded"/> </RibbonGroup> </RibbonTab> </Ribbon> </Grid>
VB.Net
'Imports System.Windows.Controls.Ribbon Private Sub RibbonRadioButton_Loaded(sender As Object, e As RoutedEventArgs) Dim radio As RadioButton = CType(sender, RibbonRadioButton) Dim innerBorder As Border = radio.Template.FindName("InnerBorder", radio) Dim outerBorder As Border = radio.Template.FindName("OuterBorder", radio) If (innerBorder IsNot Nothing AndAlso outerBorder IsNot Nothing) Then Dim bnd As Binding = New Binding("BorderBrush") bnd.Source = outerBorder BindingOperations.SetBinding(innerBorder, Border.BorderBrushProperty, bnd) End If End Sub
C#
//using System.Windows.Controls.Ribbon; private void RibbonRadioButton_Loaded(object sender, RoutedEventArgs e) { RadioButton radio=(RibbonRadioButton)sender; Border innerBorder=radio.Template.FindName("InnerBorder",radio) as Border; Border outerBorder=radio.Template.FindName("OuterBorder",radio) as Border; if (innerBorder != null && outerBorder != null) { Binding bnd = new Binding("BorderBrush"); bnd.Source = outerBorder; BindingOperations.SetBinding(innerBorder, Border.BorderBrushProperty, bnd); } }
状況に応じてinnerBorderのBorderBrushを書き換えるのが面倒なので、outerBorderの変化と同じになるようにBindingしてみました。
他の色にしたければ、状況に応じて色を設定してやってください。個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 ひらぽんModerator 2013年7月8日 2:45
- 回答としてマーク 紫葉 2013年7月8日 16:05
すべての返信
-
こんな?
<RibbonRadioButton Label="テスト" IsChecked="True" CheckedBorderBrush="Red" CheckedBackground="Red" BorderThickness="0">
SnoopでみるとInnerBorderという名前のBorderのBorderBrushが残っているみたいですね。個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 ひらぽんModerator 2013年7月8日 2:45
-
BorderThickness=0がまずいなら以下の手で、
<Grid> <Grid.RenderTransform> <ScaleTransform ScaleX="3" ScaleY="3" /> </Grid.RenderTransform> <Ribbon > <RibbonTab Header="ホーム"> <RibbonGroup Header="テスト"> <RibbonRadioButton Label="テスト" /> <RibbonRadioButton Label="テスト" CheckedBorderBrush="Red" CheckedBackground="Red"/> <RibbonRadioButton Label="テスト" CheckedBorderBrush="Red" CheckedBackground="Red" Loaded="RibbonRadioButton_Loaded"/> </RibbonGroup> </RibbonTab> </Ribbon> </Grid>
VB.Net
'Imports System.Windows.Controls.Ribbon Private Sub RibbonRadioButton_Loaded(sender As Object, e As RoutedEventArgs) Dim radio As RadioButton = CType(sender, RibbonRadioButton) Dim innerBorder As Border = radio.Template.FindName("InnerBorder", radio) Dim outerBorder As Border = radio.Template.FindName("OuterBorder", radio) If (innerBorder IsNot Nothing AndAlso outerBorder IsNot Nothing) Then Dim bnd As Binding = New Binding("BorderBrush") bnd.Source = outerBorder BindingOperations.SetBinding(innerBorder, Border.BorderBrushProperty, bnd) End If End Sub
C#
//using System.Windows.Controls.Ribbon; private void RibbonRadioButton_Loaded(object sender, RoutedEventArgs e) { RadioButton radio=(RibbonRadioButton)sender; Border innerBorder=radio.Template.FindName("InnerBorder",radio) as Border; Border outerBorder=radio.Template.FindName("OuterBorder",radio) as Border; if (innerBorder != null && outerBorder != null) { Binding bnd = new Binding("BorderBrush"); bnd.Source = outerBorder; BindingOperations.SetBinding(innerBorder, Border.BorderBrushProperty, bnd); } }
状況に応じてinnerBorderのBorderBrushを書き換えるのが面倒なので、outerBorderの変化と同じになるようにBindingしてみました。
他の色にしたければ、状況に応じて色を設定してやってください。個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 ひらぽんModerator 2013年7月8日 2:45
- 回答としてマーク 紫葉 2013年7月8日 16:05