2011-10-28 8 views
2

リストボックスがタブコントロールにあるとき、リストボックス内のアイテムの選択に問題があります。 リストボックスでアイテムを選択できません。 コードビハインドを介してリストボックスを動的に塗りつぶしていますが、ドラッグアンドドロップを使用していますが、ドラッグ&ドロップはtabcontrolを使用しています。私はTabControlのを削除した場合、すべてが動作しているTabcontrol WPFを使用しているときにリストボックスの項目を選択します

<Window x:Class="SPInstallApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:toolkit="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit.Extended" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="SharePoint 2010 - wspSync" Height="450" Width="700" AllowDrop="True" Icon="/SPInstallApp;component/Images/favicon.ico"> 

<Window.Resources> 
    <DataTemplate x:Key="CustomListBoxTemplate"> 
     <StackPanel> 
      <Grid Margin="4"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="48 "/> 
        <ColumnDefinition Width="*" /> 
       </Grid.ColumnDefinitions> 
       <Grid.RowDefinitions> 
        <RowDefinition/> 
        <RowDefinition/> 
        <RowDefinition/> 
       </Grid.RowDefinitions> 
       <Image Source="{Binding Path=ImageSource}" Grid.Column="0" Grid.RowSpan="3" Margin="0,0,5,0" /> 
       <TextBlock 
       Padding="0,5,0,0" 
       Text="{Binding Path=Title}" 
       Grid.Column="1" 
       Grid.Row="0" 
       FontWeight="Bold"/> 
       <TextBlock 
       Padding="0,0,0,5" 
       Text="{Binding Path=Description}" 
       Grid.Column="1" 
       Grid.Row="1" 
       FontStyle="Italic" /> 
       <TextBlock 
       Padding="0,0,0,5" 
       Text="{Binding Path=Status}"     
       Grid.Column="1" 
       Grid.Row="2" 
       FontStyle="Italic" Foreground="#FFDE2B2B" /> 
      </Grid>     
     </StackPanel> 
    </DataTemplate> 
</Window.Resources> 
<toolkit:BusyIndicator IsBusy="True" BusyContent="Bitte warten..." Name="busyIndicator"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="50"/> 
     </Grid.RowDefinitions> 
     <Label Content="Websitecollection wählen:" Grid.Row="0" Grid.Column="0" Margin="5,0,0,0" /> 
     <ComboBox Grid.Row="1" Grid.Column="0" Height="20" Margin="10,0,10,10" Name="cbWebsitecollection" SelectionChanged="CbWebsitecollectionSelectionChanged" /> 
     <TabControl Grid.Row="2" Grid.Column="0" Name="tc" SelectionChanged="TcSelectionChanged" Margin="10,0,10,0"> 
      <TabItem Header="Installieren"> 
       <ListBox AllowDrop="True" Background="#CCC" Drop="ListBoxDrop" Name="lbDropbox" IsSynchronizedWithCurrentItem="True" ItemTemplate="{StaticResource CustomListBoxTemplate}" KeyUp="LbDropboxKeyUp" /> 
      </TabItem> 
      <TabItem Header="Websitecollection"> 
       <CheckBox Content="test" /> 
      </TabItem> 
     </TabControl> 
     <Label Grid.Row="2" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Content="drag 'n' drop" Margin="10" Drop="ListBoxDrop" Name="lbDescription" /> 
     <Button Grid.Row="3" Grid.Column="0" Name="cmdSync" Content="Synchronisieren" Margin="10" Width="100" HorizontalAlignment="Right" Click="CmdSyncClick" /> 
     <Image Grid.Row="3" HorizontalAlignment="Left" Name="Logo" Source="/SPInstallApp;component/Images/logo.gif" Margin="10" MouseUp="LogoMouseUp" MouseEnter="LogoMouseEnter" MouseLeave="LogoMouseLeave" /> 
    </Grid> 
</toolkit:BusyIndicator></Window> 

は、ここに私のXAMLコードです。 誰かが私を助けたり、問題の原因を知りたがっていれば幸いです。

は、私は問題を発見した

+0

あなたのコードを試しましたが、ビジー信号が「ビジー」でない限り、リストから何も選択することは問題ありません。だから私はあなたがここに投稿したxamlに問題はないと思う。おそらく、リストに物を追加する方法や、いくつかのイベントプロセッサーに物事を追加する方法を知ることは有益でしょう。 – Liz

答えて

2

挨拶します。 問題はMicrosoftがMessageHandlesをどのように設計したかです。 アイテムの子がメッセージをスローした場合(たとえば、selectionChanged)、メッセージはハンドルではない場合、メッセージは親アイテムに移動します。 私の場合、ListBoxの項目をクリックすると、(未処理の) "selectionChanged"というメッセージがTabControlに送信されましたが、これが問題でした。私はTabControl.selectionChangedにカスタムコードを持っているので、リストボックス内の項目を選択する代わりに、常にコードを実行しました。

回避策は、リストボックスのselectionChangedのEventHandlerにこのコードを入れて、次のとおりです。

private void ListBox_selectionChanged(object sender, DragEventArgs e) 
{ 
    e.handled = true; 
} 

これは、親MessageHandlerのに子MessageHandlerのからのメッセージの転送を回避することができます。

私はあなたの説明を理解できますように願っています。

関連する問題