Voici une façon de le faire, au fond ce que je l'ai fait est:
- ComboBox Sous-classe et ajouter IsProgressVisible et les propriétés de dépendance ProgressValue
- Ajouter un vert rectangle le modèle de contrôle ComboBox situé exactement derrière la zone modifiable
- Lier la visibilité du rectangle à IsProgressVisible et la largeur du rectangle (à l'aide d'une ScaleTransform) à ProgressValue
D'abord le nouveau code de commande:
public class ProgressCombo : ComboBox
{
public static readonly DependencyProperty IsProgressVisibleProperty =
DependencyProperty.Register("IsProgressVisible", typeof(bool), typeof(ProgressCombo));
public bool IsProgressVisible
{
get { return (bool)GetValue(IsProgressVisibleProperty); }
set { SetValue(IsProgressVisibleProperty, value); }
}
public static readonly DependencyProperty ProgressValueProperty =
DependencyProperty.Register("ProgressValue", typeof(double), typeof(ProgressCombo));
public double ProgressValue
{
get { return (double)GetValue(ProgressValueProperty); }
set { SetValue(ProgressValueProperty, value); }
}
}
Il y a aussi un convertisseur de valeur, nous utiliserons:
public class FromPercentConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return ((double)value)/100;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Maintenant, prenez la zone de liste déroulante de style exemple de MSDN (.net version 3.5, pas 4) http://msdn.microsoft.com/en-us/library/ms750638%28VS.90%29.aspx
Ajouter une définition xmlns:l
à votre propre assemblée
Maintenant, changez <Style x:Key="{x:Type ComboBox}" TargetType="ComboBox">
-<Style x:Key="{x:Type l:ProgressCombo}" TargetType="l:ProgressCombo">
Changement <ControlTemplate TargetType="l:ComboBox">
Pour:
<ControlTemplate TargetType="l:ProgressCombo">
<ControlTemplate.Resources>
<BooleanToVisibilityConverter x:Key="Bool2Vis"/>
<l:FromPercentConverter x:Key="FromPercent"/>
</ControlTemplate.Resources>
Localisez la ligne <ContentPresenter
et ajoutez juste avant:
<Rectangle
Fill="LightGreen"
Margin="3,3,23,3"
Visibility="{TemplateBinding IsProgressVisible, Converter={StaticResource Bool2Vis}}">
<Rectangle.RenderTransform>
<ScaleTransform ScaleX="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=ProgressValue, Converter={StaticResource FromPercent}}"/>
</Rectangle.RenderTransform>
</Rectangle>
Et voilà
Merci pour l'aide mais est pas tout à fait ce dont j'ai besoin. C'était un article utile cependant. – muckdog12