2017-03-05 5 views
-1

1) 손실 동안 - 모든 작동합니다 :는 WPF : 이미지의 데이터 컨텍스트와 사용자 컨트롤을 이동하는 것을 이동하지 마십시오

enter image description here

이미지 2) 이동 사용자 컨트롤 - 이미지가 사라 :

3) 이미지가있는 사용자 정의 컨트롤을 원래 위치로 이동하면 이미지가 다시 원래대로 돌아옵니다.

이동 한 이미지가있는 사용자 정의 컨트롤이 다른 사용자 정의 컨트롤 안에 배치되었습니다.

1) 이미지를 사용자 제어 :

<UserControl x:Class="GCE.Eam.Modules.VisualCheckAnalysis.SelectedEventImageList" 
      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:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" 
      xmlns:local="clr-namespace:GCE.Eam.Modules.VisualCheckAnalysis" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300" 
      VerticalAlignment="Stretch" 
      HorizontalAlignment="Stretch"> 
    <UserControl.Resources> 
     <local:PathToFileConverter x:Key="PathToFileConverter"/> 
    </UserControl.Resources> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Grid> 
      <ListView Grid.Row="0" 
         ItemsSource="{Binding SelectedEventPhotoList}" 
         SelectedItem="{Binding SelectedEventPhoto}" 
         ScrollViewer.VerticalScrollBarVisibility="Disabled" Name="SelectedListView"> 
       <ListView.ItemContainerStyle> 
        <Style TargetType="ListViewItem"> 
         <Setter Property="HorizontalContentAlignment" Value="Center"></Setter> 
         <Style.Resources> 
          <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#00000000"/> 
          <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#00000000"/> 
         </Style.Resources> 
        </Style> 
       </ListView.ItemContainerStyle> 
       <ListView.ItemsPanel> 
        <ItemsPanelTemplate> 
         <UniformGrid Rows="1" Columns="3"/> 
        </ItemsPanelTemplate> 
       </ListView.ItemsPanel> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <dxe:ImageEdit Source="{Binding Converter={StaticResource PathToFileConverter}}" IsReadOnly="True" 
             ShowBorder="False"> 
          <dxe:ImageEdit.InputBindings> 
           <MouseBinding MouseAction="LeftDoubleClick" 
               Command="{Binding DataContext.MouseDoubleClickUpperRowCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"/> 
          </dxe:ImageEdit.InputBindings> 
         </dxe:ImageEdit> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 
       <Rectangle Grid.Column="0" Stroke="Gray" StrokeThickness="0.5"/> 
       <Rectangle Grid.Column="1" Stroke="Gray" StrokeThickness="0.5"/> 
       <Rectangle Grid.Column="2" Stroke="Gray" StrokeThickness="0.5"/> 
      </Grid> 
     </Grid> 
     <GridSplitter Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Height="2" 
         Background="Gainsboro" ResizeDirection="Auto"/> 
     <Grid Grid.Row="1"> 
      <ListView 
         ItemsSource="{Binding MatchingEventPhotoList}" 
         SelectedItem="{Binding SelectedMatchingEventPhoto}" 
         ScrollViewer.VerticalScrollBarVisibility="Disabled" Name="MatchingListView"> 
       <ListView.ItemContainerStyle> 
        <Style TargetType="ListViewItem"> 
         <Setter Property="HorizontalContentAlignment" Value="Center"></Setter> 
         <Style.Resources> 
          <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#00000000"/> 
          <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#00000000"/> 
         </Style.Resources> 
        </Style> 
       </ListView.ItemContainerStyle> 
       <ListView.ItemsPanel> 
        <ItemsPanelTemplate> 
         <UniformGrid Rows="1" Columns="3"/> 
        </ItemsPanelTemplate> 
       </ListView.ItemsPanel> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <dxe:ImageEdit Source="{Binding Converter={StaticResource PathToFileConverter}}" IsReadOnly="True" 
             ShowBorder="False"> 
          <dxe:ImageEdit.InputBindings> 
           <MouseBinding MouseAction="LeftDoubleClick" 
               Command="{Binding DataContext.MouseDoubleClickLowerRowCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"/> 
          </dxe:ImageEdit.InputBindings> 
         </dxe:ImageEdit> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
        <ColumnDefinition/> 
       </Grid.ColumnDefinitions> 
       <Rectangle Grid.Column="0" Stroke="Gray" StrokeThickness="0.5"/> 
       <Rectangle Grid.Column="1" Stroke="Gray" StrokeThickness="0.5"/> 
       <Rectangle Grid.Column="2" Stroke="Gray" StrokeThickness="0.5"/> 
      </Grid> 
     </Grid> 
    </Grid> 
</UserControl> 

2) 이미지 사용자 제어 포함하는 사용자 제어 : visualCheckAnalysis가

<UserControl x:Class="GCE.Eam.Modules.VisualCheckAnalysis.VisualCheckAnalyzerView" 
      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:visualCheckAnalysis="clr-namespace:GCE.Eam.Modules.VisualCheckAnalysis" 
      xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol" 
      xmlns:dxb="http://schemas.devexpress.com/winfx/2008/xaml/bars" 
      xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" 
      xmlns:dxr="http://schemas.devexpress.com/winfx/2008/xaml/ribbon" 
      xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm" 
      xmlns:dxdo="http://schemas.devexpress.com/winfx/2008/xaml/docking" 
      xmlns:behaviors="clr-namespace:GCE.AppFramework.Behaviors;assembly=GCE.AppFramework" 
      mc:Ignorable="d" 
      d:DataContext="{d:DesignInstance visualCheckAnalysis:VisualCheckAnalyzerViewModel}" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <dxb:BarManager> 
     <dxb:BarManager.Items> 
      <dxb:BarButtonItem x:Name="Refresh" Content="Пересчитать" 
           Hint="Обновить окно режима анализа ВИК" 
           ShowKeyGesture="False" 
           Glyph="Images/Recalculate_16.png" 
           LargeGlyph="Images/Recalculate_32.png" 
           Command="{Binding RecalculateCommand}" 
           KeyGesture="F5" 
           /> 

      <dxb:BarEditItem x:Name="MatchRadiusEdit" 
              EditWidth="60" ToolTip="{Binding DefaultMatchRadiusTooltip}" 
          Content="Rср" EditValue="{Binding MatchRadius}" > 
       <dxb:BarEditItem.EditSettings> 
        <dxe:SpinEditSettings MaskType="Numeric" IsFloatValue="True" 
              HorizontalContentAlignment="Right" 
              MinValue="{Binding MinRadius, Mode=OneWay}" 
              MaxValue="{Binding MaxRadius, Mode=OneWay}" 
              Increment="{Binding Increment, Mode=OneWay}"/> 
       </dxb:BarEditItem.EditSettings> 
      </dxb:BarEditItem> 

      <dxb:BarButtonItem x:Name="AddBaseTab" Content="В закладку" 
           Hint="Открыть закладку для выделенного объекта" 
           Glyph="Images/ToTab_16.png" LargeGlyph="Images/ToTab_32.png" 
           Command="{Binding ActivateBaseEvent}" /> 

      <dxb:BarButtonItem x:Name="AddMatchingTab" Content="В закладку" 
           Hint="Открыть закладку для выделенного объекта" 
           Glyph="Images/ToTab_16.png" LargeGlyph="Images/ToTab_32.png" 
           Command="{Binding ActivateMatchingEvent}" /> 

     </dxb:BarManager.Items> 


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

      <dxr:RibbonControl x:Name="RibbonControl" Grid.Row="0" RibbonStyle="Office2010" 
           PageCategoryAlignment="Left" ToolbarShowCustomizationButton="False" 
           ShowApplicationButton="False" ToolbarShowMode="Hide"> 

       <dxmvvm:Interaction.Behaviors> 
        <behaviors:NoContextMenuDxRibbonBehavior/> 
       </dxmvvm:Interaction.Behaviors> 

       <dxr:RibbonDefaultPageCategory> 
        <dxr:RibbonPage x:Name="MainPage" Caption="Главная"> 
         <dxr:RibbonPageGroup Caption="Операции" MergeOrder="{x:Static visualCheckAnalysis:VisualCheckAnalysisModule.ModuleSortHint}"> 
          <dxb:BarEditItemLink BarItemName="MatchRadiusEdit"/> 
          <dxb:BarButtonItemLink BarItemName="Refresh" /> 
         </dxr:RibbonPageGroup> 
        </dxr:RibbonPage> 
       </dxr:RibbonDefaultPageCategory> 
      </dxr:RibbonControl> 

      <Border Grid.Row="1"> 
       <dxlc:LayoutControl HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Orientation="Vertical"> 
        <dxlc:LayoutGroup VerticalAlignment="Stretch" 
             HorizontalAlignment="Stretch" 
             Orientation="Vertical" 
             dxlc:LayoutControl.AllowVerticalSizing="True" 
             Width="Auto"> 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto"/> 
           <RowDefinition Height="*"/> 
          </Grid.RowDefinitions> 
          <TextBlock> 
           <Run FontWeight="Bold" Text="Обслед. для сопоставления: "/> 
           <Run Text="{Binding BaseInspectionName, Mode=OneWay}"/> 
          </TextBlock> 

          <Border Grid.Row="1"> 
           <visualCheckAnalysis:SelectedEventsList/> 
           <dxb:BarManager.DXContextMenu> 
            <dxb:PopupMenu x:Name="PopupMenu"> 
             <dxb:PopupMenu.ItemLinks> 
              <dxb:BarButtonItemLink BarItemName="AddBaseTab" UserGlyphSize="Small"/> 
             </dxb:PopupMenu.ItemLinks> 
            </dxb:PopupMenu> 
           </dxb:BarManager.DXContextMenu> 
          </Border> 
         </Grid> 
        </dxlc:LayoutGroup> 
        <dxlc:LayoutGroup VerticalAlignment="Stretch" 
             HorizontalAlignment="Stretch" 
             Orientation="Vertical" 
             dxlc:LayoutControl.AllowVerticalSizing="True" 
             Width="Auto"> 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto"/> 
           <RowDefinition Height="*"/> 
          </Grid.RowDefinitions> 
          <visualCheckAnalysis:InspectionList Grid.Row="0"/> 
          <Border Grid.Row="1"> 
           <visualCheckAnalysis:MatchingEventList/> 
           <dxb:BarManager.DXContextMenu> 
            <dxb:PopupMenu x:Name="MatchedPopupMenu"> 
             <dxb:PopupMenu.ItemLinks> 
              <dxb:BarButtonItemLink BarItemName="AddMatchingTab" UserGlyphSize="Small"/> 
             </dxb:PopupMenu.ItemLinks> 
            </dxb:PopupMenu> 
           </dxb:BarManager.DXContextMenu> 
          </Border> 

         </Grid> 
        </dxlc:LayoutGroup> 
        <dxlc:LayoutGroup> 
         <dxdo:DocumentGroup AllowDrag="True" AllowFloat="True" AllowMove="True" 
              ShowTabForSinglePage="True" ClosePageButtonShowMode="InAllTabPageHeaders"> 
          <dxdo:DocumentPanel ShowCaption="True" Caption="Картинки для сопоставления" ShowCaptionImage="True" 
               CaptionImage="pack://application:,,,/GCE.Eam.OilAndGasIndustry;component/Images/Photo_16.png" 
               ToolTip="Картинки для сопоставления"> 
           <visualCheckAnalysis:SelectedEventImageList/> 
          </dxdo:DocumentPanel> 
         </dxdo:DocumentGroup> 
        </dxlc:LayoutGroup> 
       </dxlc:LayoutControl> 
      </Border> 
      <dxr:RibbonStatusBarControl Grid.Row="2"> 
      </dxr:RibbonStatusBarControl> 
     </Grid> 
    </dxb:BarManager> 
</UserControl> 

: SelectedEventImageList 사용자는이 코드는 다음과 같이 보인다 이미지로 제어.

여러분도 알다시피 DevExpress 도킹 컨트롤을 사용합니다.

이미지가있는 사용자 컨트롤을 이동할 때 데이터 컨텍스트가 느슨한 것처럼 보일 수 있지만 어떻게 작동하는지 잘 모르겠습니다.

UPDATE :

<ListView Grid.Row="0" 
      ItemsSource="{Binding DataContext.SelectedEventPhotoList}" 
      SelectedItem="{Binding DataContext.SelectedEventPhoto}" 
      ... 
+0

시도는 SelectedEventPhotoList와 SelectedEventPhoto 특성을 가진 클래스의 인스턴스에 SelectedEventImageList 컨트롤의 명시 적 설정의 DataContext를 설정합니다. DataContext가 부모 창에서 상속 된 경우 DocumentGroup이 플로팅 될 때 더 이상 바인딩이 작동하지 않습니다. DocumentGroup이 더 이상 시각적 인 하위 항목이 아니기 때문입니다. – mm8

+0

XAML에서 DataContext를 명시 적으로 설정하겠습니까? – tesicg

+0

예를 들어, 예. – mm8

답변

0

시도는 SelectedEventImageList 제어를위한 Loaded 이벤트를 처리하고 명시 적으로 DataContext을 설정합니다. 이 같은

뭔가 :

<visualCheckAnalysis:SelectedEventImageList Loaded="Control_Loaded" /> 

private bool _isLoaded; 
private void Control_Loaded(object sender, RoutedEventArgs e) 
{ 
    if (!_isLoaded) 
    { 
     SelectedEventImageList ctrl = sender as SelectedEventImageList; 
     ctrl.DataContext = this.DataContext; 
     _isLoaded = true; 
    } 
}