2014-02-23 2 views
0

나는 이미지를 드래그 앤 드롭 할 수있는 이미지 컨트롤이 있습니다. 이미지가 드롭되지 않고 컨트롤이 비어 있지 않으면 "Drop a picture here"와 같은 대체 텍스트를 표시하여 그 사람에게 기대되는 것을 더 잘 나타내려고합니다.아직 이미지가 지정되지 않은 경우 대체 텍스트 표시

나는이 전혀 아무것도 보여줍니다이 함께 트리거를 사용하는 방법을 알아낼 수 없습니다 나는 더 이상 내 이미지 컨트롤에서 사진을 삭제할 수 있습니다 :

<StackPanel Grid.Column="1" Grid.Row="2" FlowDirection="LeftToRight" Orientation="Horizontal" Margin="0px 4px">   
    <StackPanel.Resources> 
     <DataTemplate x:Key="tmpTemplate"> 

      <Border BorderThickness="2" BorderBrush="#FF969DFF" CornerRadius="2" VerticalAlignment="Top"> 
      <DockPanel> 
      <Image Name="imgSelectedViewImage" Source="{Binding Image}" MinWidth="32" MinHeight="32" MaxWidth="48" MaxHeight="48" 
        HorizontalAlignment="Left" Stretch="None" 
        IsEnabled="{Binding EditMode}" Margin="2px"/> 
      <Label Content="Drag here" Name="AltText" Visibility="Collapsed"></Label> 
      </DockPanel> 
     </Border> 

     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding Path=Image}" Value="{x:Null}"> 
      <Setter TargetName="AltText" Property="Visibility" Value="Visible" /> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 
</StackPanel.Resources>  

답변

1

내가 말할 수 없습니다 이전에 작업 한 드래그 앤 드롭 기능을 중단하기 위해 수행 한 작업을 수행하면 변경 사항을 실행 취소하여 해결할 것을 제안하는 것입니다. 그러나 컬렉션이 비어있을 때 무언가를 표시하려면 쉽게 할 수있는 방법이 있습니다. 컬렉션의 Count 속성을 사용하면 항목을 추가하거나 제거 할 때 업데이트되지 않으므로 좋지 않습니다.

당신은 단순히이에 대한 항목 컬렉션에 옆에 int 속성을 추가 할 수 있습니다,하지만 당신은 당신이 그것을 위해 INotifyPropertyChanged 인터페이스를 통지 있는지 확인해야합니다 또한 때 컬렉션 속성 변경 :

public ObservableCollection<YourItem> YourItems 
{ 
    get { return yourItems; } 
    set 
    { 
     yourItems = value; 
     NotifyPropertyChanged("YourItems"); 
     NotifyPropertyChanged("YourItemsCount"); 
    } 
} 

public int YourItemsCount 
{ 
    get { return YourItems.Count; } 
} 

그럼 당신이 할 수있는 이 같은 간단한 DataTrigger에서 사용 :

<Grid> 
    <!-- Put your normal content here --> 
    <TextBlock FontSize="16" HorizontalAlignment="Center" VerticalAlignment="Center" 
     Text="Drop images here"> 
     <TextBlock.Style> 
      <Style> 
       <Setter Property="TextBlock.Visibility" Value="Collapsed" /> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding YourItemsCount}" Value="0"> 
         <Setter Property="TextBlock.Visibility" Value="Visible" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
</Grid> 
+0

감사합니다. Xaml의 유용한 부분입니다. 나는 지금 그것을 시험 할 것이다. – Jerome

0

을 나는 TargetNullValue와 정적 리소스에 FallbackValue를 설정하여 그것을했다. 아래의 코드 스 니펫을 참조하십시오. 물론 원하는 모든 것을 설정할 수 있습니다.

<Image Stretch="Uniform" 
     Grid.Row="0" 
     Grid.Column="1" 
     MaxHeight="250" 
     MaxWidth="250" 
     Margin="10" 
     Source="{Binding Path=Character.Portrait, TargetNullValue={StaticResource FallbackImage}, FallbackValue={StaticResource FallbackImage}}"> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="MouseDoubleClick"> 
       <cal:ActionMessage MethodName="ChangePicture"> 
       </cal:ActionMessage> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
</image> 

가 트리거이 해결책이 될 수 있습니다 사용하기 때문에, 원하는대로 더 많은 수 있었다 또 다른 방법 : Handling null when binding to an Image in XAML (허용 대답보고). 그러나 내 생각에는 TargetNullValue와 FallbackValue를 설정하는 것이 최선의 방법입니다.

관련 문제