トップ回答者
Converter が環境によって上手く反映されない

質問
-
いつもお世話になります。
チェックボックスのチェックによって パネルを隠すコンバータを設定しています。
(チェックON→ パネル表示、チェックOFF→パネル非表示)
私の環境では問題なく反映されたのですが、別の端末では画面の初期表示時にConverterの結果が反映されず
チェックがOFFなのに非表示という状態になります。環境によってConverterが上手く動作しないことがあるのでしょうか。
またあるとしたら何が問題になってくるのでしょうか。
お手数をおかけしますが、ご教示お願い致します
開発環境はVB2010 Windows7 で行いました。 別の端末もWindows7でしたのでOSの違いではないと思うのですが・・・
ちなみにソースの方はの通りです。
---XAML側----
<my:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
<CheckBox VerticalAlignment="Center" Name="CheckSetTime" />
<StackPanel Name="PnlUseSetTime" Orientation="Horizontal" Margin="20,1,0,0"
Visibility="{Binding ElementName=CheckSetTime,Path=IsChecked,Converter={StaticResource BooleanToVisibilityConverter}}" >※----- テキスト等のコントロール ----※
</StackPanel>
---Converter 側-----
Public Class BooleanToVisibilityConverter
Implements IValueConverterPublic Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
Dim returnVisible As Visibility
If value Then
returnVisible = Visibility.Visible
Else
returnVisible = Visibility.Hidden
End IfReturn returnVisible
End FunctionPublic Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
Return Visibility.Visible
End Function
End Class
回答
-
再現できないので推測だけですが。
CheckBoxのIsCheckedはTrue,False,Nothing(XAMLでは{x:Null}の3つの状態になります。
VbBeginer001さんのコードだとIf value Then returnVisible = Visibility.Visible Else returnVisible = Visibility.Hidden End If
でvalueがNothingだとFalse側のHiddenが実行されます。
Windowsの画面のテーマによってはIsCheckedがNothingの時に薄いチェックが入っているように見えることがあります。
そのため、ちょっと見ただけだとチェックされているのにHidden側になっているように見えてしまう可能性があります。個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 ひらぽんModerator 2014年2月10日 4:40
- 回答としてマーク 星 睦美 2014年2月21日 8:29
すべての返信
-
再現できないので推測だけですが。
CheckBoxのIsCheckedはTrue,False,Nothing(XAMLでは{x:Null}の3つの状態になります。
VbBeginer001さんのコードだとIf value Then returnVisible = Visibility.Visible Else returnVisible = Visibility.Hidden End If
でvalueがNothingだとFalse側のHiddenが実行されます。
Windowsの画面のテーマによってはIsCheckedがNothingの時に薄いチェックが入っているように見えることがあります。
そのため、ちょっと見ただけだとチェックされているのにHidden側になっているように見えてしまう可能性があります。個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 ひらぽんModerator 2014年2月10日 4:40
- 回答としてマーク 星 睦美 2014年2月21日 8:29
-
gekkaさん、いつも丁寧な回答ありがとうとざいます。
たしかに同じWindowsでもテーマは異なっていたので
テーマを合わせて、チェックボックスの初期値をFalseに設定するよう変更したのですが
たのですが、やはり同様の結果との事でした。
もう少し調査をしてみます。ありがとうございます。
- 編集済み ひらぽんModerator 2014年2月10日 9:14 返信する名前が違ってたので、すみませんが私の方で修正させて頂きました