我剛測試過它,看起來,綁定不起作用AppBar.IsOpen
。
我勢必一個Button.IsEnabled
到GridView.SelectedItem
以及,按鈕被正確設置到false
,但AppBar.IsOpen
沒有,轉換隻按鈕綁定調用一次。
它可能有一些與此有關:http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.appbar.isopen
注意綁定到IsOpen屬性,因爲當該屬性設置不會發生的PropertyChanged通知沒有預期的結果。
雖然我認爲這隻意味着另一個方向。 (編輯:這裏是一個simialar後:opening the appbar in metro style apps using binding property)
下面是我使用的代碼:
<common:LayoutAwarePage.BottomAppBar>
<AppBar IsOpen="{Binding SelectedItem, Converter={StaticResource ObjectToBooleanConverter}, ElementName=gridView}"
IsSticky="True"
Background="#E5F50000" />
</common:LayoutAwarePage.BottomAppBar>
<Grid Style="{StaticResource LayoutRootStyle}">
<Grid.RowDefinitions>
<RowDefinition Height="140" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<GridView x:Name="gridView"
HorizontalAlignment="Right"
Margin="0"
Grid.Row="1"
Width="469">
<Button Content="asdf" />
<Button Content="asdf" />
<Button Content="asdf" />
</GridView>
<Button x:Name="bsetnull"
Content="setnull"
HorizontalAlignment="Left"
Margin="78,10,0,0"
Grid.Row="1"
VerticalAlignment="Top" Tapped="bsetnull_Tapped"/>
<Button x:Name="bsettoone"
Content="settoone"
HorizontalAlignment="Left"
Margin="78,71,0,0"
Grid.Row="1"
VerticalAlignment="Top" Tapped="bsettoone_Tapped"/>
<Button Content="Button"
HorizontalAlignment="Left"
Margin="78,147,0,0"
Grid.Row="1"
VerticalAlignment="Top"
IsEnabled="{Binding SelectedItem, Converter={StaticResource ObjectToBooleanConverter}, ElementName=gridView}" />
</Grid>
和轉換器
public class ObjectToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
if (value == null)
return false;
else
return true;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
有一些控制依賴項屬性值的優先規則(http://msdn.microsoft.com/zh-cn/library/ms743230.aspx)可能在此處播放。那就是說,你確定你想創造這樣的行爲嗎?這是一個相當主觀的,但我認爲它可能不是一個用戶直觀的應用欄有時出現,而不是其他人。也許可以將應用欄上各種命令的啓用綁定到選定狀態,甚至可以在沒有選擇的情況下在欄上包含一些文本,以便爲用戶提供關於如何啓用各種功能的提示? –
謝謝尼爾。我有一個項目列表,以及當選擇一個項目時變得可見的按鈕。我認爲將這些按鈕放在應用欄中會很明智,然後在選擇某個項目時將其打開。事實證明,這很難做到,我一直在尋找XAML中的解決方案。現在,如果我正確地理解了你,你就是說這根本不是一個好主意。保留一組命令的應用欄,並且在選擇某個項目時不要更改它。我同意 - 用戶會發現這令人困惑。另外,感謝關於依賴屬性優先規則的鏈接。 –