2011-05-13 22 views
1
<Page x:Class="Project.ProjectDiagramView" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:s="clr-namespace:DiagramDesigner" 
     xmlns:c="clr-namespace:DiagramDesigner.Controls" 
     mc:Ignorable="d" 
     d:DesignHeight="850" d:DesignWidth="1000" 
    Title="Project Diagram">  

    <Grid Margin="10"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <ContentControl Content="{StaticResource MyToolbar}"/> 
     <Grid Grid.Row="1" Margin="0,10,0,0"> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition MinWidth="135" MaxWidth="135"/> 
       <ColumnDefinition Width="*" /> 
       <ColumnDefinition MaxWidth="500" MinWidth="350" /> 
      </Grid.ColumnDefinitions> 

      <!-- Toolbox --> 
      <StackPanel Grid.Column="0" Margin="0,0,5,0"> 
       <!--<Expander Header="Symbols" Content="{StaticResource SymbolStencils}" IsExpanded="True"/>--> 
      </StackPanel> 
      <!-- GridSplitter --> 
      <GridSplitter Focusable="False" Width="2" Background="LightGray" 
        VerticalAlignment="Stretch" HorizontalAlignment="Right"/> 
      <!-- Designer --> 
      <GroupBox Header="Diagram" Grid.Column="1" Margin="3,0,3,0"> 
       <ScrollViewer HorizontalScrollBarVisibility="Auto" 
         VerticalScrollBarVisibility="Auto"> 
        <s:DesignerCanvas Focusable="true" x:Name="MyDesigner" 
          Background="{StaticResource WindowBackgroundBrush}" 
          Margin="10" FocusVisualStyle="{x:Null}" /> 
       </ScrollViewer> 
      </GroupBox> 

      <GroupBox Header="Diagram" Grid.Column="3" Margin="3,0,0,0"> 
       <ScrollViewer HorizontalScrollBarVisibility="Auto" 
         VerticalScrollBarVisibility="Auto"> 
        <s:SelectedDesignItem /> 
       </ScrollViewer> 
      </GroupBox> 
     </Grid> 
    </Grid> 
</Page> 

這是Diagram Designer我從CodeProject上使用,上面的代碼給它加載WPF的觀點是給錯誤

「設置屬性‘System.Windows.Controls.ContentControl.Content’錯誤第二次投擲一個例外。「行號「24」和行位置「10」。

當頁面加載第一次,完美的作品,但導航到它thorws錯誤在同一頁第二次,我很無能

我試圖評論工具箱中的錯誤,它完美的話,工具箱沒有被處置,我不知道。

請任何人指導我。

謝謝。

回答

2

您正在使用的XAML並非設計爲永久加載兩次。導致錯誤的行是ContentControl,將其Content屬性設置爲StaticResource。如您所說,您要加載兩次,因此有兩個ContentControl實例,但只有一個靜態資源實例。 WPF將不允許同一個元素屬於兩個不同的視覺樹,因此您收到錯誤信息的第二負載,我相信:

指定的元素已經是另一個元素的邏輯子

要解決這個問題將需要相當數量的返工。一種方法是將內容控件的直接靜態內容轉換爲模板,但不知道應用程序的結構如何,很難說這很容易工作,或者只是創建新問題。

3

您可以嘗試在MyToolbar資源的聲明中添加x:Shared =「False」。這將導致運行時始終創建資源的新實例,而不是重用現有資源。

1

瑞克是正確的。

我有完全相同的問題,並使用以下解決它。

基本上,當您導航到頁面時,請保留該頁面的記錄,然後如果您嘗試再次導航到頁面,請首先檢查是否導航到頁面。如果您已經在頁面上,請不要執行任何操作,否則請導航到頁面。

public partial class MainWindow : Window 
{ 
    Uri currentPage; 

    private void btnNavigateToPage(object sender, MouseButtonEventArgs e) 
    { 
     if (currentPage == null) 
     { 
      this.Cursor = Cursors.Wait; 
      frameWorkingArea.Navigate(new Uri("/pgMyPage.xaml", UriKind.RelativeOrAbsolute)); 

      currentPage = frameWorkingArea.Source; 
     } 

     if (!currentPage.Equals("/pgMyPage.xaml")) 
     { 

      frameWorkingArea.Navigate(new Uri("/pgMyPage.xaml", UriKind.RelativeOrAbsolute)); 

      currentPage = frameWorkingArea.Source; 
     } 
    } 
} 

希望有幫助。

問候, 奧尼爾

+0

「名稱‘frameWorkingArea’不在當前情況下存在」 什麼是「frameWorkingArea」應該是什麼? – soulblazer

+0

這是一個放置在MainWindow.xaml上的框架控件。 – Neill

+0

哦,就這樣。非常感謝。 – soulblazer