2011-08-17 3 views
2

Je suis en train de créer un éditeur de texte, j'essaie de configurer certaines fonctionnalités pour que l'utilisateur puisse sélectionner une couleur dans une liste déroulante et cela changera la couleur du texte. En ce moment, ma zone de liste déroulante est chargé avec les couleurs du système en XML en utilisant une ressource comme siChanger la couleur du texte en utilisant les couleurs du système à partir d'une liste déroulante

<ToolBarTray.Resources> 
<ObjectDataProvider MethodName="GetType" ObjectType="{x:Type sys:Type}" x:Key="colorsTypeOdp"> 
<ObjectDataProvider.MethodParameters> 
<sys:String>System.Windows.Media.Colors, PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</sys:String> 
</ObjectDataProvider.MethodParameters> 
</ObjectDataProvider> 

<ObjectDataProvider ObjectInstance="{StaticResource colorsTypeOdp}" MethodName="GetProperties" x:Key="colorPropertiesOdp"> 
</ObjectDataProvider> 
</ToolBarTray.Resources> 

<ComboBox Name="colors" ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}" DisplayMemberPath="Name" SelectedValuePath="Name" MinWidth="100" ToolTip="Color" /> 

Je suis en train de faire un code d'événement selectionChanged qui changera le texte à la couleur du système choisi par l'utilisateur, si vous avez besoin de voir plus de code ou besoin de plus d'informations faites le moi savoir. La zone de liste déroulante est juste chargée avec le nom de la couleur, alors comment utiliser ce nom pour obtenir la couleur elle-même dans le code d'événement pour définir le texte à la nouvelle couleur? Merci, boeuf

+0

Quelle est la question? –

+0

voir la question mise à jour – Beef

Répondre

1

Voici un exemple de la liaison (en utilisant la valeur de la zone de liste déroulante pour remplir un rectangle), et au-dessous est un exemple de changer la couleur du TextBlock que les étiquettes (vous évidemment mettre à jour votre sélectionné texte à la place).

Reliure:

<StackPanel Orientation="Horizontal" 
      xmlns:sys="clr-namespace:System;assembly=mscorlib"> 
    <StackPanel.Resources> 
     <ObjectDataProvider MethodName="GetType" 
          ObjectType="{x:Type sys:Type}" 
          x:Key="colorsTypeOdp"> 
      <ObjectDataProvider.MethodParameters> 
       <sys:String>System.Windows.Media.Colors, PresentationCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</sys:String> 
      </ObjectDataProvider.MethodParameters> 
     </ObjectDataProvider> 
     <ObjectDataProvider ObjectInstance="{StaticResource colorsTypeOdp}" 
          MethodName="GetProperties" 
          x:Key="colorPropertiesOdp" /> 
    </StackPanel.Resources> 
    <!-- SelectedValuePath="Name" --> 
    <ComboBox Name="colors" 
       ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}}" 
       DisplayMemberPath="Name" 
       SelectedValuePath="Name" 
       MinWidth="100" 
       ToolTip="Color" /> 
    <Rectangle Width="100" 
       Height="50" 
       Stroke="White" 
       StrokeThickness="2"> 
     <Rectangle.Fill> 
      <SolidColorBrush Color="{Binding ElementName=colors, Path=SelectedValue}" /> 
     </Rectangle.Fill> 
    </Rectangle> 
    <TextBlock x:Name="txtColor" 
       Foreground="White" 
       Text="{Binding ElementName=colors, Path=SelectedValue}" /> 
</StackPanel> 

événement:

colors.SelectionChanged += (s, e) => 
    { 
     BrushConverter converter = new BrushConverter(); 
     txtColor.Foreground = converter.ConvertFromString(colors.SelectedValue.ToString()) as SolidColorBrush; 
    }; 
Questions connexes