понедельник, 7 ноября 2011 г.

WPF: ComboBox с прогресс баром

Необходимо было создать комбобокс, который показывал бы прогресс при асинхронной загрузке данных с сервиса. Получилось примерно следующее:

<Style TargetType="ComboBox" BasedOn="{StaticResource {x:Type ComboBox}}" x:Key="ProgressComboBox">
    <Style.Triggers>
      <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=ItemsSource}" Value="{x:Null}">
        <Setter Property="Template">
          <Setter.Value>
            <ControlTemplate TargetType="ComboBox">
              <Grid>
                <ComboBox />
                <с:GifImage Gif="pack://application:,,,/Images/loader16.gif" Stretch="None" Width="16" Height="16" Margin="10,2,2,2" HorizontalAlignment="Left" />
              </Grid>
            </ControlTemplate>
          </Setter.Value>
        </Setter>
      </DataTrigger>
    </Style.Triggers>
  </Style>


* This source code was highlighted with Source Code Highlighter.

GifImage позаимствован отсюда. Главное - не забывать сделать Binding асинхронным:
<ComboBox ItemsSource="{Binding MyCollection, IsAsync=True}" Style="{StaticResource ProgressComboBox}" />