2011-01-26 14 views
1

これは私がこれまで持っているものです。コンボボックスのItemTemplateでクリック可能なボタンを持つ方法

<dxe:ComboBoxEdit Name="cboUserCustomReports" 
         Width="300" Height="Auto" 
         Margin="0,5,0,5" 
         ItemsSource="{Binding Path=UserReportProfileList,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}" 
         EditValue="{Binding Path=UserReportProfileID,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
         ValueMember="UserReportProfileID" 
         DisplayMember="ReportName" 
         PopupClosed="cboUserCustomReports_PopupClosed"> 
      <dxe:ComboBoxEdit.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="100*"/> 
          <ColumnDefinition Width="20"/> 
         </Grid.ColumnDefinitions> 
         <TextBlock Grid.Column="0" 
            Text="{Binding ReportName, Mode=Default}" 
            VerticalAlignment="Stretch" HorizontalAlignment="Left"/> 
         <Button Name="btnDelete" 
           Grid.Column="1" 
           Width="20" Height="20" 
           VerticalAlignment="Center" HorizontalAlignment="Right" 
           Click="btnDelete_Click"> 
          <Button.Template> 
           <ControlTemplate> 
            <Image Source="/RMSCommon;component/Resources/Delete.ico"></Image> 
           </ControlTemplate> 
          </Button.Template> 
         </Button> 
        </Grid> 
       </DataTemplate> 
      </dxe:ComboBoxEdit.ItemTemplate> 
     </dxe:ComboBoxEdit> 

まず、私は一人で立つことが2つの列をしたいです。ユーザーはアイテムを選択または削除できる必要があります。

次に、ItemTemplateのボタンをクリック可能にしたいと思います。

この動作を取得するには、何を追加する必要がありますか?これは、それが現時点でどのように見えるかです

enter image description here

答えて

2

をクリック
私はあなたのボタンがクリック可能であることを、仮定、そしてあなたがクリックイベントを処理する方法を知りたいです。右?私はあなたの商品・クラスはUserReportProfileを命名されているものと

private void btnDelete_Click(object sender, RoutedEventArgs e) { 
    FrameworkElement fe = sender as FrameworkElement; 
    if(null == fe){ 
     return; 
    } 
    UserReportProfile userReportProfile = fe.DataContext as UserReportProfile; 
    if (null == userReportProfile) { 
     return; 
    } 
    // Do here your deletion-operation 

} 

:クリックハンドラの
は、次のコードを追加します。それ以外の場合は、宣言された型を適宜変更してください。位置合わせのための

レイアウト
、あなたのコンボボックスに次の宣言を追加します。

HorizontalContentAlignment="Stretch" 

これはあなたのDataTemplateグリッドに全幅を与え、あなたが望むようあなたは、あなたのアイテムをレイアウトすることができます。

<dxe:ComboBoxEdit Name="cboUserCustomReports"       
     HorizontalContentAlignment="Stretch"    
     Width="300" Height="Auto"       
     Margin="0,5,0,5" 
     ...> 
+0

レイアウト部分が完全に機能しました。どうも。今すぐボタンのために。ボタンはクリックできないので、私はそれにどのようにアプローチしますか? – Willem

+0

問題は、IMOがボタンのコントロールテンプレートにあることです。開始するには、ボタンのテンプレートを削除します。イメージをボタンのコンテンツにします。これはあなたのソリューション(ボーダーが表示されます)ほど素晴らしいことではありませんが、あなたは削除ロジックを開発することができます。削除ロジックを終了したら、 "ControlTemplate Button WPF"のgoogleにボタンのコントロールテンプレートを作成する方法の例を見てください。別の(安価な)可能性は、画像上でPreviewMouseDownを処理することですが、私はこのようにすることをお勧めしません。 – HCL

1

あなたの質問は十分ではありません。しかし、私はあなたのコンボボックスにのテキストの画像をに垂直に並べたいと思う。もしそうなら、あなたはこれを行う必要があります:

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="*"/> 
    <ColumnDefinition Width="Auto"/> 
</Grid.ColumnDefinitions> 

あなたのアイテムはすでにクリック可能だと思います!

+0

@Nawaz:これは大きな違いはありません。100 *は*と同じで、20は固定幅です。これは準Autoと同じです。ここでのポイントは "Horizo​​ntalContentAlignment = Stretch"ですが、 "Auto"を使用すると固定幅よりも優れています。 – HCL

+0

これは機能しています。オートで頭のためのThx。 – Willem

+0

@HCL:しかし、 '*'だけで十分です。実際に注意を払う必要があるのは、「自動」です。 – Nawaz

関連する問題