IValueConverter return 整型数组
IValueConverter return int array
您好,我正在编辑日历。现在我需要用我最喜欢的日子填满日历。
这就是我的尝试,这就是输出
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int[] days = new int[] { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 };
return days;
}
这是 xaml:
<ContentPresenter
x:Name="NormalText"
Content="{Binding Converter={StaticResource GeorgianToPersianDate}}"
/>
更新:
<Style x:Key="CalendarDayButtonStyle" TargetType="CalendarDayButton">
<Setter Property="MinWidth" Value="10" />
<Setter Property="MinHeight" Value="10" />
<Setter Property="FontSize" Value="12" />
<Setter Property="Width" Value="32" />
<Setter Property="Height" Value="32" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="CalendarDayButton">
<ControlTemplate.Resources>
<local:GeorgianToPersianDate x:Key="GeorgianToPersianDate" />
</ControlTemplate.Resources>
<Grid>
<Rectangle
x:Name="TodayBackground"
Fill="{DynamicResource DangerBrush}"
Opacity="0"
RadiusX="16"
RadiusY="16" />
<Rectangle
x:Name="SelectedBackground"
Fill="{DynamicResource PrimaryBrush}"
Opacity="0"
RadiusX="16"
RadiusY="16" />
<ContentPresenter
x:Name="NormalText"
Content="{Binding Converter={StaticResource GeorgianToPersianDate}}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<TextElement.Foreground>
<SolidColorBrush Color="{DynamicResource PrimaryTextColor}" />
</TextElement.Foreground>
</ContentPresenter>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.1" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="NormalText"
Storyboard.TargetProperty="Opacity"
To=".35"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="SelectedBackground"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0:0:.2" />
<ColorAnimation
Storyboard.TargetName="NormalText"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
To="White"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="ActiveStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Active" />
<VisualState x:Name="Inactive">
<Storyboard>
<ColorAnimation
Storyboard.TargetName="NormalText"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
To="{DynamicResource ThirdlyTextColor}"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="DayStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="RegularDay" />
<VisualState x:Name="Today">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="TodayBackground"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0" />
<ColorAnimation
Storyboard.TargetName="NormalText"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
To="White"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这是我的 xaml 我只想删除默认天数并添加我自己的天数我想我可以用转换器来做到这一点。那么,如果我不能使用转换器来更改日期,我该如何更改呢?
首先,让我们从绑定开始。
A ContentPresenter
通过 Content
属性 呈现它的 UI。这只是一个object
。 XAML 有一些奇特的方法可以将某些对象转换为视觉效果,但如果它失败了,它只会在 object
上调用 ToString()
并显示文本。查看您的 IValueConverter
,您返回的是 int[]
,而 Content
变成了那个。为什么它没有显示 System.Int32[]
对于您提供的代码是未知的,但这就是正在发生的事情。
所以知道让我们看看你的 IValueConverter
。
您将返回 int
的 array
(int[]
)。现在当你调用 ToString()
.
时就是 System.Int32[]
如果您 Template
是一个包含多个项目的类型,例如 ItemsControl
然后分配 ItemsSource
会自动执行相同的操作,但对数组中的每个项目。
IValueConverter
的用法不正确。它不转换任何东西,也不是转换器的用途。您应该只在 ViewModel 或任何地方对 属性 进行纯绑定,但不要为此使用 IValueConverter
。
当你已经有一些绑定时使用转换器;但不想使用该绑定的结果,并且更愿意 'convert' 该结果而不是其他东西。
例如:如果您要绑定到返回 int
值的 属性,但更愿意将 int
转换为相关的 enum
名称;那么您将编写一个转换器,读取 int
和 returns 相关的 enum
名称。
修正:
很难用您提供的 XAML 给予,但知道有几种方法可以解决这个问题。第一的;你至少需要有一个模板,除了一个数组作为绑定来显示它们。看看您的视图图像,我认为您的情况并非如此。我相信您已经将 ContentControl
放入模板中;并且该模板是另一个控件的 ItemsSource
的一部分。如果是这种情况,那么您将把 ItemsSource
绑定到数组;在 ContentPresenter
中,像这样绑定到它的数据:
<ContentPresenter x:Name="NormalText"
Content="{Binding}"/>
综上所述;在没有看到整体 XAML.
的情况下,我无法以正确的方式给你一个明确的解决方案
更新后,我认为问题在于您正在设置 CalenderButton
的样式并将那里的 Content
分配给数组。像我上面那样写绑定;然后自定义 Style
Calendar
并将那里的绑定设置为数组。我从来没有做过日历样式,但我可以通过查看它来判断 Calendar
有一些时尚的 panel
和 ItemsSource
,这些项目的模板是 CalendarButton
.换句话说,日期从日历分配到按钮,而您正试图直接从按钮执行。
您好,我正在编辑日历。现在我需要用我最喜欢的日子填满日历。
这就是我的尝试,这就是输出
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int[] days = new int[] { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31 };
return days;
}
这是 xaml:
<ContentPresenter
x:Name="NormalText"
Content="{Binding Converter={StaticResource GeorgianToPersianDate}}"
/>
更新:
<Style x:Key="CalendarDayButtonStyle" TargetType="CalendarDayButton">
<Setter Property="MinWidth" Value="10" />
<Setter Property="MinHeight" Value="10" />
<Setter Property="FontSize" Value="12" />
<Setter Property="Width" Value="32" />
<Setter Property="Height" Value="32" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="FocusVisualStyle" Value="{x:Null}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="CalendarDayButton">
<ControlTemplate.Resources>
<local:GeorgianToPersianDate x:Key="GeorgianToPersianDate" />
</ControlTemplate.Resources>
<Grid>
<Rectangle
x:Name="TodayBackground"
Fill="{DynamicResource DangerBrush}"
Opacity="0"
RadiusX="16"
RadiusY="16" />
<Rectangle
x:Name="SelectedBackground"
Fill="{DynamicResource PrimaryBrush}"
Opacity="0"
RadiusX="16"
RadiusY="16" />
<ContentPresenter
x:Name="NormalText"
Content="{Binding Converter={StaticResource GeorgianToPersianDate}}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<TextElement.Foreground>
<SolidColorBrush Color="{DynamicResource PrimaryTextColor}" />
</TextElement.Foreground>
</ContentPresenter>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0:0:0.1" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Normal" />
<VisualState x:Name="Disabled">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="NormalText"
Storyboard.TargetProperty="Opacity"
To=".35"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="SelectionStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Unselected" />
<VisualState x:Name="Selected">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="SelectedBackground"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0:0:.2" />
<ColorAnimation
Storyboard.TargetName="NormalText"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
To="White"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="ActiveStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="Active" />
<VisualState x:Name="Inactive">
<Storyboard>
<ColorAnimation
Storyboard.TargetName="NormalText"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
To="{DynamicResource ThirdlyTextColor}"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
<VisualStateGroup x:Name="DayStates">
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="0" />
</VisualStateGroup.Transitions>
<VisualState x:Name="RegularDay" />
<VisualState x:Name="Today">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="TodayBackground"
Storyboard.TargetProperty="Opacity"
To="1"
Duration="0" />
<ColorAnimation
Storyboard.TargetName="NormalText"
Storyboard.TargetProperty="(TextElement.Foreground).(SolidColorBrush.Color)"
To="White"
Duration="0" />
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
这是我的 xaml 我只想删除默认天数并添加我自己的天数我想我可以用转换器来做到这一点。那么,如果我不能使用转换器来更改日期,我该如何更改呢?
首先,让我们从绑定开始。
A ContentPresenter
通过 Content
属性 呈现它的 UI。这只是一个object
。 XAML 有一些奇特的方法可以将某些对象转换为视觉效果,但如果它失败了,它只会在 object
上调用 ToString()
并显示文本。查看您的 IValueConverter
,您返回的是 int[]
,而 Content
变成了那个。为什么它没有显示 System.Int32[]
对于您提供的代码是未知的,但这就是正在发生的事情。
所以知道让我们看看你的 IValueConverter
。
您将返回 int
的 array
(int[]
)。现在当你调用 ToString()
.
System.Int32[]
如果您 Template
是一个包含多个项目的类型,例如 ItemsControl
然后分配 ItemsSource
会自动执行相同的操作,但对数组中的每个项目。
IValueConverter
的用法不正确。它不转换任何东西,也不是转换器的用途。您应该只在 ViewModel 或任何地方对 属性 进行纯绑定,但不要为此使用 IValueConverter
。
当你已经有一些绑定时使用转换器;但不想使用该绑定的结果,并且更愿意 'convert' 该结果而不是其他东西。
例如:如果您要绑定到返回 int
值的 属性,但更愿意将 int
转换为相关的 enum
名称;那么您将编写一个转换器,读取 int
和 returns 相关的 enum
名称。
修正:
很难用您提供的 XAML 给予,但知道有几种方法可以解决这个问题。第一的;你至少需要有一个模板,除了一个数组作为绑定来显示它们。看看您的视图图像,我认为您的情况并非如此。我相信您已经将 ContentControl
放入模板中;并且该模板是另一个控件的 ItemsSource
的一部分。如果是这种情况,那么您将把 ItemsSource
绑定到数组;在 ContentPresenter
中,像这样绑定到它的数据:
<ContentPresenter x:Name="NormalText"
Content="{Binding}"/>
综上所述;在没有看到整体 XAML.
的情况下,我无法以正确的方式给你一个明确的解决方案更新后,我认为问题在于您正在设置 CalenderButton
的样式并将那里的 Content
分配给数组。像我上面那样写绑定;然后自定义 Style
Calendar
并将那里的绑定设置为数组。我从来没有做过日历样式,但我可以通过查看它来判断 Calendar
有一些时尚的 panel
和 ItemsSource
,这些项目的模板是 CalendarButton
.换句话说,日期从日历分配到按钮,而您正试图直接从按钮执行。