2010-07-05 153 views
2

Backgorund編輯子對象

我目前正在寫一個程序,允許用戶選擇從一個組合框中選擇一個製造。組合框是使用以下WPF代碼段在WPF創建:

<ComboBox Height="23" Margin="40.422,128.423,229.908,0" Name="itemProductManufacture" ToolTip="Click to open drop down menu" VerticalAlignment="Top" Text="Select A Manufacture" SelectionChanged="itemProductManufacture_SelectionChanged" DropDownOpened="itemProductManufacture_DropDownOpened"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding ManufactureId}" Width="0"/> 
        <Image Name="itemManufactureImage" Source="{Binding ManufactureImage}" Height="15" Width="70" Stretch="Uniform"/> 
        <TextBlock Text="{Binding ManufactureName}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

的數據提供形式的數據庫,並且每個條目具有圖片,一個名稱和一個ID(有意未示出)

問題

我想編碼組合框的行爲,所以當它是打開的圖像高度是50,當它是關閉它是15這是因爲圖像是第一次顯示時,然後更小時一旦選定,這樣就不會佔用太多空間。

我已經嘗試使用代碼編輯圖像比例,但無法使用它的名稱或組合框的任何其他子項來使用它。

感謝

喬納森

+0

你試過設置MaxHeight屬性嗎? – 2010-07-05 11:04:50

+0

我做過了,但我試圖設置一個不同的高度,當盒子展開到關閉狀態時,設置組合框的最大高度屬性縮小它,並且圖像覆蓋height屬性。 – 2010-07-05 11:08:28

回答

0

由於您正在使用數據模板,因此無法直接按名稱訪問它。

嘗試這樣的事情 -

Image image = this.itemProductManufacture.ItemTemplate.FindName("itemManufactureImage", this) as Image; 

有一件事我不明白的是你是否想改變圖像大小爲所有項目或選定一個?如果您需要訪問該圖像獲得particulat項組合框您可能需要使用ItemContainerGenerator.ContainerFromItem,如下面的帖子解釋 -

WPF - ItemsControl - How do I get find my "CheckBox" item that is in the ItemTemplate?

http://www.sitechno.com/Blog/HowToUseAttachedPropertiesAsAnExtensionMechanismForACheckedListbox.aspx

看看這個,要知道,找到控制的各種方式 - How can I find WPF controls by name or type?

0

您可以編輯使用綁定從碼圖像屬性。或者你可以在Datatemplate中使用觸發器。當組合複選項檢查屬性更改時,可以更改相應圖像的高度屬性

0

試試這個:

<Image Height = "{Binding Path=IsDropDownOpen, 
          RelativeSource={RelativeSource FindAncestor, 
              AncestorType={x:Type ComboBox}}, 
          Converter={StaticResource myBoolToHeightConverter}}" /> 

An example for Converter here