2016-05-15 85 views
0

結合元素問題,我有一個簡單的XAML:複選框在WP8.1

 <CheckBox x:Name="chkShowGrid" IsThreeState="False" IsChecked="False">Show content</CheckBox> 

     <Grid Visibility="{Binding IsChecked, ElementName=chkShowGrid}"> 
     <TextBlock>Some content goes here</TextBlock> 
     </Grid> 

此XAML效果很好WinRT中的Windows 8.1的應用程序。當我在WP8.1應用程序中嘗試它時,它在設計器中工作(顯示或隱藏網格取決於複選框值),但不在電話中。爲什麼?

更新: 我有通用8.1應用程序,如果使用轉換器,然後顯示我的例外:

錯誤CS0012:類型「類型」是在沒有 引用的程序規定。您必須添加到程序集的引用 'System.Runtime, 版本= 4.0.10.0,文化=中性公鑰= b03f5f7f11d50a3a'

轉換代碼:

 class BoolConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      if (value == null) return false; 

      return (bool)value; 
     } 
     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      throw new NotImplementedException(); 
     }  
} 

在XAML

<Page.Resources> 
    <local:BoolConverter x:Name="ThatsMyConverter"/> 
</Page.Resources> 

........

<Grid Visibility="{Binding IsChecked, ElementName=chkShowSettings,Converter={StaticResource ThatsMyConverter}}"> 
+1

嘗試通過轉換器將IsChecked屬性綁定到Visibility。這可能是問題! – WPMed

+0

轉換器顯示異常 –

+0

您是否在xaml文件的開頭引用了轉換器命名空間,並將轉換器添加爲靜態資源?應該做到這一點,使其工作 – WPMed

回答

1

您的轉換器返回一個布爾值,並且您試圖將一個布爾值指定爲可見性,它只能將可見值或摺疊值視爲可能的值。嘗試從您的轉換器而不是bool返回可見性。這應該工作。例如在您的轉換器中:

if (value == null) return Visibility.Collapses; 
    var val = (value as bool); 
    if (val) 
     return Visibility.Visible; 
    else 
     return Visibility.Collapsed; 
+0

它的工作表示感謝!簡單的解決方案,但我很困惑爲什麼在WinRT和設計器中一切都沒有轉換的作品 –