none
Converter が環境によって上手く反映されない RRS feed

  • 質問

  • いつもお世話になります。

    チェックボックスのチェックによって パネルを隠すコンバータを設定しています。

    (チェック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 IValueConverter

        Public 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 If

            Return returnVisible
        End Function

        Public 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

    2014年2月6日 10:06

回答

  • 再現できないので推測だけですが。

    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!)

    2014年2月9日 17:08

すべての返信

  • 再現できないので推測だけですが。

    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!)

    2014年2月9日 17:08
  • gekkaさん、いつも丁寧な回答ありがとうとざいます。

    たしかに同じWindowsでもテーマは異なっていたので

    テーマを合わせて、チェックボックスの初期値をFalseに設定するよう変更したのですが

    たのですが、やはり同様の結果との事でした。

    もう少し調査をしてみます。ありがとうございます。


    • 編集済み ひらぽんModerator 2014年2月10日 9:14 返信する名前が違ってたので、すみませんが私の方で修正させて頂きました
    2014年2月10日 9:11