Silverlight 3ナビゲーションバーでページリンクを一時的に無効にするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1606964

質問

Silverlight 3ナビゲーションアプリケーションがあり、アイテムの編集中にさまざまなSilverlightページへのリンクを一時的に無効にします。ユーザーが画面から移動するのではなく、明示的に編集をキャンセルする必要があります。

[編集]プログラムでナビゲーションリンクを一時的に無効にするにはどうすればよいですか

役に立ちましたか?

解決

各HyperLinkのIsEnabledをグローバルプロパティにバインドできます。コードからプロパティを設定して、ナビゲーションを無効にすることができます。

MainPage.cs

public partial class MainPage : UserControl
{
    public bool IsNavigationEnabled
    {
        get { return (bool)GetValue(IsNavigationEnabledProperty); }
        set { SetValue(IsNavigationEnabledProperty, value); }
    }
    public static readonly DependencyProperty IsNavigationEnabledProperty =
        DependencyProperty.Register("IsNavigationEnabled", typeof(bool), typeof(MainPage), null);

    public MainPage()
    {
        InitializeComponent();

        DataContext = this;
    }

...

MainPage.xaml

<HyperlinkButton
    x:Name="Link1"
    IsEnabled="{Binding IsNavigationEnabled}"
    Style="{StaticResource LinkStyle}"
    NavigateUri="/Home"
    TargetName="ContentFrame"
    Content="home" />

Home.xaml.cs

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MainPage page = (MainPage)Application.Current.RootVisual;
        page.IsNavigationEnabled = !page.IsNavigationEnabled;
    }

他のヒント

これは答えよりも推測にすぎませんが、

まあ、シンプルでエレガントではない方法があります。それは、編集しようとしているアイテムがフォーカスを取得したときにすべてのハイパーリンクを強制的に無効にし、アイテムがフォーカスを失うか、ユーザーがキャンセルします。これを行うには、内部にリンクがあるコンテナーを取得し、それらをループして無効または有効にすることができます。

ナビゲーションが別のコントロールに完全に存在する場合、同じコントロールの方法とフォーカスの喪失に従って、そのコントロールを無効に設定できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top