2011-05-13 75 views
2
<ContextMenu x:Key="EffectsContext" 
       Name="EffectsMenu" 
       StaysOpen="true"> 

    <MenuItem Header="Add Blur"> 
     <MenuItem.Icon> 
      <Image Width="16" 
        Height="16" 
        Source="{Binding Source={x:Static prop:Resources.BlurIcon}, 
            Converter={StaticResource BitmapToImageSourceConverter}}" /> 
     </MenuItem.Icon> 
    </MenuItem> 

    <MenuItem Header="Add Fractal"> 
     <MenuItem.Icon> 
      <Image Width="16" 
        Height="16" 
        Source="{Binding Source={x:Static prop:Resources.Fractalcon}, 
            Converter={StaticResource BitmapToImageSourceConverter}}" /> 
     </MenuItem.Icon> 
    </MenuItem> 
</ContextMenu> 

EffectsMenu在我的MainWindow.xaml.cs文件中不可訪問。當我嘗試它,它抱怨說,它不是在當前上下文訪問:來自xaml的WPF控制參考在代碼端不可見

public MainWindow () 
{ 
    this.InitializeComponent (); 

    Console.WriteLine (EffectsMenu); 
} 

我也試過:

x:Name="EffectsMenu" 

但同樣的結果。

任何想法可能是錯誤的,以及如何解決它?

+0

和這個菜單在哪裏定義?在資源部分?資源具有密鑰,而不是名稱。 – 2011-05-13 22:08:14

+0

是的它在TreeView控件的資源中。那麼我應該把它放在別的地方,讓它們都可以訪問嗎? – 2011-05-13 22:33:55

+0

但是,爲什麼你想從後面的代碼訪問控制?也許有一個更好的方法來實現你真的neeed – Liel 2013-08-03 07:53:54

回答

4

試試這個

var v = FindResource("EffectsContext"); 
-2

不能在這裏測試,只是一個猜測:

this.EffectsMenu 
+0

我試過這個,但沒有運氣。 – 2011-05-13 20:44:13

1

擰下ContextMenu

+0

同樣的錯誤。 – 2011-05-13 20:45:31

0

x:Key應該是x:關鍵是x:名稱呢?

+0

我在xaml一側使用Key,但是我將Name更改爲x:Name,但同樣的錯誤。 – 2011-05-13 20:46:00

2

如果您添加了x:key =「」我認爲您在ResourceDictionary中聲明瞭ContextMenu(如<SomeControl.Resources>)。在這種情況下,你不能直接訪問它,請嘗試以下操作:

的XAML:

<Window x:Class="Test.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" > 
    <StackPanel x:Name="sp"> 
    <StackPanel.Resources> 
     <ContextMenu x:Key="EffectsContext" 
        Name="EffectsMenu" 
        StaysOpen="true"> 

     </ContextMenu> 
    </StackPanel.Resources> 
    </StackPanel> 
</Window> 

代碼隱藏:

ContextMenu menu = this.sp.Resources["EffectsContext"] as ContextMenu; 
+0

謝謝,我有這個代碼,但得到了崩潰,所以想直接訪問控件,而不是搜索和鑄造。但如果這是不可能的,那麼我會用它。 – 2011-05-13 20:52:35