2

ユーザー コントロールがあり、このコントロールの背景色を動的に変更したいと考えています。

ビューモデルの特定の列挙型が設定されているときに色を変更したいので、コンバーターを使用して列挙型を SolidColorBrush に変換します。

このコンバーターを別のコントロールに配置すると、正常に動作します。しかし、xaml ファイルの先頭にある usercontrol プロパティに配置すると、エラーが発生します。

<UserControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
xmlns:ee="http://schemas.microsoft.com/expression/2010/effects"
mc:Ignorable="d"
xmlns:converters="clr-namespace:UserControlSolution.Converter"
x:Class="UserControlSolution.UserControlButton"
x:Name="UserControl"
Height="50" 
VerticalAlignment="Top"
Background="{Binding CallStatus, Converter={StaticResource CallStatusBackgroundConverter}}"
Margin="2,0,0,5"
>

<UserControl.Resources>
    <converters:CallStatusEnumToBackgroundColor x:Key="CallStatusBackgroundConverter"/>
    <converters:StatusEnumToStatusResourceConverter x:Key="StatusIconConverter"/>
    <BooleanToVisibilityConverter x:Key="BoolToVis" />

    <Style x:Key="SelectedStyle" TargetType="{x:Type WrapPanel}">
        <Setter Property="Background" Value="Transparent"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="true">
                <Setter Property="Background" Value="{Binding CallStatus, Converter={StaticResource CallStatusBackgroundConverter}}"/>
                <Setter Property="Opacity" Value=".92"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

<Grid x:Name="LayoutRoot" VerticalAlignment="Top" HorizontalAlignment="Stretch">        
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="30"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="50"/>
    </Grid.ColumnDefinitions>
 </Grid>

私のコンバーターは列挙型から色に変換するだけです

namespace UserControlSolution.Converter
{
    [ValueConversion(typeof(CallEnum), typeof(SolidColorBrush))]
    public class CallStatusEnumToBackgroundColor : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            switch ((CallEnum)value)
            {
                case CallEnum.Connected:
                    return (SolidColorBrush)Application.Current.Resources["Red"];
                case CallEnum.ConnectedIntern:
                    return (SolidColorBrush)Application.Current.Resources["Blue"];
                case CallEnum.Hold:
                    return (SolidColorBrush)Application.Current.Resources["Orange"];
                case CallEnum.Idle:
                    return (SolidColorBrush)Application.Current.Resources["DarkGrey"];
                case CallEnum.OffRing:
                    return (SolidColorBrush)Application.Current.Resources["Yellow"];
                default:
                    return null;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotSupportedException();
        }
    }
}
4

3 に答える 3

8

これをリソースの後に置き、ユーザー コントロールからバインドを削除します。

<UserControl.Background>
   <SolidColorBrush Color="{Binding CallStatus, Converter={StaticResource CallStatusBackgroundConverter}}"/>
</UserControl.Background>
于 2013-09-13T09:02:19.297 に答える
0

エラーの内容に関係なく (これがエラーの可能性もあります)、どのクラスでも入力の型を確認する必要があることを指摘したいと思います。Converter

if (value == null || value.GetType() != typeof(YourRequiredType)) 
    return DependencyProperty.UnsetValue;
于 2013-09-13T08:58:35.520 に答える