2017-07-30 4 views
1

初心者として、私はautorsのためのアプリケーションを開発しようとしています。ワークスペースページには2つの列があるグリッドがあります。これらの列(単一または両方)の可視性は、ラジオボタンによって制御されます。各列には、WorkspaceUsercontrolのインスタンスが保持されます。
このusercontrolのsplitviewペインには、章、シーンなどが保持されます。コンテンツは異なるタイプ(テキスト、画像、HTMLなど)のリストビュー項目で満たされます。リストビュー項目をあるインスタンスから他のbeiドラッグ、ので、1つのインスタンスの変更は、他のインスタンスに反映される必要があります。これはこれまでのコードです:ユーザーコントロールの2つのインスタンス

EDIT 私はもっと分かりやすくするために、新しい "ストリップされた"プロジェクトを作成しました。私はWindows Template Studio(空の基本MVVM)を使用しました。

MainPage.xamlを

<Page 
    x:Class="Test.Views.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:usercontrols="using:Test.Usercontrols" 
    xmlns:toolkit="using:Microsoft.Toolkit.Uwp.UI.Controls" 
    mc:Ignorable="d"> 
    <Grid 
     x:Name="ContentArea" 
     Margin="{StaticResource MediumLeftRightMargin}"> 

     <Grid.RowDefinitions> 
      <RowDefinition x:Name="TitleRow" Height="48"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <TextBlock 
      x:Name="TitlePage" 
      x:Uid="Main_Title" 
      Style="{StaticResource PageTitleStyle}" /> 

     <Grid 
      Grid.Row="1" 
      Background="{ThemeResource SystemControlPageBackgroundChromeLowBrush}"> 
      <!--The SystemControlPageBackgroundChromeLowBrush background represents where you should place your content. 
       Place your content here.--> 
      <Grid 
       Grid.Row="0" 
       x:Name="WorkspaceGrid"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition 
         x:Name="Workspace1Column" 
         Width="1*"></ColumnDefinition> 
        <ColumnDefinition 
         x:Name="WorkspaceSplitterColumn" 
         Width="auto"></ColumnDefinition> 
        <ColumnDefinition 
         x:Name="Workspace2Column" 
         Width="1*"></ColumnDefinition> 
       </Grid.ColumnDefinitions> 
       <!--workspace 1--> 
       <usercontrols:MainpageUsercontrol 
        x:Name="WorkspaceUC1" 
        Grid.Column="0"></usercontrols:MainpageUsercontrol> 
       <!--Column Grid Splitter--> 
       <toolkit:GridSplitter 
        x:Name="MainpageGridSplitter" 
        Grid.Column="1" 
        Width="11" 
        ResizeBehavior="BasedOnAlignment" 
        ResizeDirection="Auto" 
        Background="Gray" 
        Foreground="White" 
        FontSize="13"> 
        <toolkit:GridSplitter.Element> 
         <Grid> 
          <TextBlock 
           HorizontalAlignment="Center" 
           IsHitTestVisible="False" 
           VerticalAlignment="Center" 
           Text="&#xE784;" 
           Foreground="Black" 
           FontFamily="Segoe MDL2 Assets"></TextBlock> 
         </Grid> 
        </toolkit:GridSplitter.Element> 
       </toolkit:GridSplitter> 
       <!--workspace 2--> 
       <usercontrols:MainpageUsercontrol 
        x:Name="WorkspaceUC2" 
        Grid.Column="2"></usercontrols:MainpageUsercontrol> 
      </Grid> 
     </Grid> 
    </Grid> 
</Page> 

MainPage.xaml.cs

using Test.ViewModels; 

using Windows.UI.Xaml.Controls; 

namespace Test.Views 
{ 
    public sealed partial class MainPage : Page 
    { 
     public MainViewModel ViewModel { get; } = new MainViewModel(); 
     public MainPage() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

MainPageViewModel.cs

using System; 

using Test.Helpers; 

namespace Test.ViewModels 
{ 
    public class MainViewModel : Observable 
    { 
     public MainViewModel() 
     { 
     } 
    } 
} 

MainpageUsercontrol.xaml

<UserControl 
    x:Class="Test.Usercontrols.MainpageUsercontrol" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:Test.Usercontrols" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:converter="using:Test.Converters" 
    mc:Ignorable="d" 
    d:DesignHeight="300" 
    d:DesignWidth="400"> 
    <UserControl.Resources> 
     <converter:NullableBoolToBoolConverter 
      x:Key="NullableBoolToBoolConverter" /> 
     <Style 
      x:Key="HamburgerButtonStyle" 
      TargetType="ToggleButton"> 
      <Setter 
       Property="Content" 
       Value="&#xE700;" /> 
      <Setter 
       Property="FontFamily" 
       Value="Segoe MDL2 Assets" /> 
      <Setter 
       Property="FontSize" 
       Value="20" /> 
      <Setter 
       Property="MinHeight" 
       Value="48" /> 
      <Setter 
       Property="MinWidth" 
       Value="48" /> 
     </Style> 
    </UserControl.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition 
       Height="auto"></RowDefinition> 
      <RowDefinition 
       Height="*"></RowDefinition> 
     </Grid.RowDefinitions> 
     <RelativePanel 
      Grid.Row="0" 
      Background="WhiteSmoke"> 
      <ToggleButton 
       x:Name="HamburgerButton" 
       Style="{StaticResource HamburgerButtonStyle}" 
       IsThreeState="False" 
       RelativePanel.AlignBottomWithPanel="True" 
       RelativePanel.AlignTopWithPanel="True" 
       RelativePanel.AlignLeftWithPanel="True" 
       IsChecked="{x:Bind WorkspaceSplitview.IsPaneOpen, Mode=TwoWay, Converter={StaticResource NullableBoolToBoolConverter}}"></ToggleButton> 
     </RelativePanel> 
     <SplitView 
      Grid.Row="1" 
      x:Name="WorkspaceSplitview" 
      IsPaneOpen="False"> 
      <SplitView.Pane> 
       <Grid Background="LightGray"> 
        <Grid.RowDefinitions> 
         <RowDefinition 
          Height="1*"></RowDefinition> 
        </Grid.RowDefinitions> 
        <TextBlock 
         Grid.Row="0" 
         Text="ToDo: Listview Navigation"></TextBlock> 
       </Grid> 
      </SplitView.Pane> 
      <SplitView.Content> 
       <TextBox 
        Background="BlanchedAlmond" 
        Height="60" 
        Width="200" 
        Text="ToDo: Content"></TextBox> 
      </SplitView.Content> 
     </SplitView> 
    </Grid> 
</UserControl> 

MainpageUsercontrol.xaml.cs

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Runtime.InteropServices.WindowsRuntime; 
using Windows.Foundation; 
using Windows.Foundation.Collections; 
using Windows.UI.Xaml; 
using Windows.UI.Xaml.Controls; 
using Windows.UI.Xaml.Controls.Primitives; 
using Windows.UI.Xaml.Data; 
using Windows.UI.Xaml.Input; 
using Windows.UI.Xaml.Media; 
using Windows.UI.Xaml.Navigation; 

// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236 

namespace Test.Usercontrols 
{ 
    public sealed partial class MainpageUsercontrol : UserControl 
    { 
     public MainpageUsercontrol() 
     { 
      this.InitializeComponent(); 
     } 
    } 
} 

NullableBoolToBoolConverter

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Windows.UI.Xaml.Data; 

namespace Test.Converters 
{ 
    public class NullableBoolToBoolConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      bool? val = (bool?)value; 
      return val.HasValue ? val.Value : false; 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) => value; 
    } 
} 

問題:私は、ユーザーコントロールのボタンをクリックするとインスタンス1、このインスタンスのsplitviewペインが開きますが、私がクリックしたときその後インスタンス2のボタンで、のインスタンス1のsplitviewペインが閉じます。なぜこれはそうですか?

私はUWPでのUserControlについて多くをグーグルが、私は深く、彼らがどのように機能するかを理解するために何かを見つけることができませんでした:

  • (イベント、プロパティ)カプセル化されていますか?
  • usercontrolはどのように呼び出しページと通信しますか?
  • どのようにお互いに通信しますか?
  • usercontrol.contentはどのように機能しますか?

うまくいけば、私はusercontrolsについてちょっと混乱している唯一の人ではないでしょうか。

更新 次の画像ボタンをクリックする前に、ライブツリーを示しています

Before

とスプリットペインがopenendたときは、このライブツリーを示しています After

たぶんこの「ポップアップルートを"解決へのヒントは何ですか?

+1

上記のコードスニペットをテストしましたが、上記の問題を再現できません。あなたは[mcve]を共有していただけますか? –

+0

私はより包括的にするためにコードを編集しました。私はあなたが今問題を再現できることを願っています。 ありがとうございます。 – user3350279

答えて

0

は誤って私は解決策を見つけた:私は私のSplitviewへ

のDisplayMode = "インライン"

を追加しました。なぜこの作品がわかりませんが、私は不平を言うことはありません。私はちょうど感謝して受け入れます;-)

とにかく:誰かがこの種の行動を説明することはできますか?

関連する問題