2010-07-05 1 views
2

BackgorundРедактирование дочерних объектов в поле со списком с помощью C# и МОФ

В настоящее время я пишу программу, которая позволяет пользователю выбрать производство из выпадающего списка. Поле со списком создается в 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> 

данных предусмотрена форма базы данных и каждая запись имеет изображение, название и идентификатор (намеренно не показан)

Проблема

Я пытаюсь закодировать поведение поля со списком, поэтому, когда он открыт, высота изображения равна 50, а когда она закрыта, это значит, что изображение больше, когда оно отображается первым, а затем меньше после выбора, поэтому он не занимает слишком много места в форме.

Я пробовал редактировать изображения с помощью кода, но не могу его использовать, используя его имя или любые другие дочерние элементы в поле со списком.

Благодаря

Jonathan

+0

Вы пытались установить свойство MaxHeight? –

+0

Я сделал, но я пытаюсь установить разную высоту, когда поле расширяется до его закрытия, устанавливая свойство максимальной высоты для поля со списком, и для изображения оно превышает свойство высоты. –

ответ

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. При изменении свойств comboboxitems вы можете изменить свойство высоты соответствующего изображения

0

Попробуйте это:

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

An example for Converter here

Смежные вопросы