我有一个大约12个项目的解决方案,一个被设置为启动项目,其中包含主窗口.目前我IValueConverter
的所有人都在这个项目中.
我现在想把它们转移到一个只包含转换器的单独项目中.这样我就可以在所有项目中重用它们,而不仅仅是主窗口.
我收到错误:
"错误3找不到类型或命名空间名称'IValueConverter'(您是否缺少using指令或程序集引用?) "
我想将文本块的一部分粗体化.这是我在IValueConverter中尝试但它似乎不起作用.
public class Highlighter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
return null;
}
return "Question1:<Bold>Answer1</Bold>, Question2:<Bold>Answer2</Bold>, Question3:<Bold>Answer3</Bold>";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
这不会使答案变得大胆.
这就是我在XAML中使用它的方式.
<TextBlock Height="Auto" Width="Auto" MaxHeight="64" Text="{Binding Path=QuestionAnswer, Mode=OneWay, Converter={x:Static Highlighter}}" />
Run Code Online (Sandbox Code Playgroud)
有没有办法通过格式化文本或将TextBlock发送到转换器来实现这一目标?
我有一个ListView
有Grid
两列和多行.每一行在每列中都有一个绑定到ListView中的值的TextBlock
每个Text
属性ItemSource
.我需要TextBlock
根据第一个中的值对第二个文本进行一些转换TextBlock
.如何将第一个文本框的值输入转换器?
这是我到目前为止:
XAML:
<UserControl.Resources>
<local:ValueStringConverter x:Key="valueStringConverter" />
</UserControl.Resources>
<ListView Name="theListView" ItemsSource="{Binding ItemCollection}" SelectedItem="{Binding SelectedItem}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Grid.Row="1" >
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Path=Key}" Grid.Column="0" Margin="0,0,10,0" />
<TextBlock Text="{Binding Path=Value, Converter={StaticResource valueStringConverter}}" TextWrapping="Wrap" Grid.Column="1" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)
代码ValueStringConverter
:
public class ValueStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, …
Run Code Online (Sandbox Code Playgroud) 简介: 这是我在应用程序中使用的翻译器的一部分。当我使用组合框更改语言时,我想更新其中的所有字符串。
问题: 当我的转换器属性发生更改时,我想更新标签内容。是否可以?如果我更改 CurrentLanguage,这种方式(我的制作方法)不会更新内容。
<Label
ID:Name="CompanyName"
Content="{Binding ElementName=CompanyName, Path=Name, Converter={ID:Static Controller:Translator.Instance}}" />
Run Code Online (Sandbox Code Playgroud)
这个组合框改变了我的当前值 -有效
<ComboBox
SelectedItem="{Binding Path=CurrentLanguage, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, Converter={StaticResource FlagConverter}}">
Run Code Online (Sandbox Code Playgroud)
翻译器代码背后 -有效(PropertyChanged 被解雇)
public partial class Translator : IValueConverter, INotifyPropertyChanged
{
...
private String m_currentLanguage;
public String CurrentLanguage
{
get { return m_currentLanguage; }
set
{
m_currentLanguage = value;
OnPropertyChanged("CurrentLanguage");
}
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return Get((String)value); // nonrelevant function - works
}
public object ConvertBack(object value, Type …
Run Code Online (Sandbox Code Playgroud) 我希望能够在DataTemplate中显示索引值,但我不希望数据由模型或视图模型保留或支持.换句话说,如果OC中项目的顺序发生变化,我不想重新计算索引.该值应与OC中的基础索引固有关联.如果索引从0开始是可以的(实际上,我希望它).
其他人使用的一种方法是AlternationIndex AP,但这在某些情况下有其自身的缺陷.
最后一个想法:我不禁想到转换器将在最终解决方案中发挥作用.
我正在创建将包含 Wpf 应用程序项目和 Xamarin Forms 移动应用程序的解决方案。我将代码的一些常见部分放入可移植类库中。是否可以创建 ValueConvertes 以便我可以在 Wpf 和 Xamarin 形式中使用它们?
我正在努力维护别人的代码,因为那个人是WPF专家.另一方面,我不是.:)
该代码使用IValueConverter将状态枚举转换为布尔值,该布尔值控制是否在屏幕上显示UserControl.
我发现了一个缺点,即在这种情况下单个枚举是不够的,实际上还需要考虑另一个布尔值.是否有另一个可以使用的对象,它可以将2个项目作为参数进行转换?("converter"参数已被使用.)
一个简单的例子如下.
现有代码的逻辑说......
If it's sunny, go to work.
If it's raining, don't go to work.
Run Code Online (Sandbox Code Playgroud)
我需要考虑另一件事情,如下所示.
If it's sunny and you're wearing pants, go to work.
If it's sunny and you're not wearing pants, don't go to work.
If it's raining and you're wearing pants, don't go to work.
If it's raining and you're not wearing pants, don't go to work.
Run Code Online (Sandbox Code Playgroud)
执行转换的IValueConverter只允许我将一个"东西"用于转换.
任何帮助表示赞赏.谢谢,
MJ
我正在尝试编写一个值转换器,以将WPF ToggleButton的Boolean IsChecked属性绑定到模型中的非布尔值(碰巧是双精度)。我编写的convert函数如下所示:
public object Convert(object value, Type targetType, object paramter, System.Globalization.CultureInfo culutre)
{
if (targetType != typeof(Boolean))
throw new InvalidOperationException("Target type should be Boolean");
var input = double.Parse(value.ToString());
return (input==0.0) ? false: true;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当调用函数时,targetType不是我期望的-它是
"System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
Run Code Online (Sandbox Code Playgroud)
而不是System.Boolean。这是预期的吗?过去我没有麻烦地写了其他转换器。
我有一个具有类似值的枚举
HomeRun,StolenBase,FirstBase等
我想在组合框中显示这些值,在大写字母之前插入一个空格,因此它将显示为"Home Run","Stolen Base"等.
我已经有了可以为我做格式化的代码,并且我已将该代码添加到IValueConverter实现的'Convert'方法中.
我的问题是,我在哪里需要使用这个转换器(在xaml中),这样不仅下拉列表,而且显示的值,将具有这种格式?我是否还需要实现ConvertBack?
我很清楚为枚举设置'描述'并使用流行的EnumToDescriptionConverter,但我宁愿远离它.
我有一个简单的WPF XAML窗口,我需要在以下XAML中创建一个StaticResource密钥。
XAML源代码是
<Window x:Class="WpfApplication1.Trigger"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:super="clr-namespace:WpfApplication1"
Title="Trigger" Height="300" Width="300">
<Grid>
<Border x:Name="m_Border" Width="100" Height="30" HorizontalAlignment="Center" VerticalAlignment="Top" Background="#FFF2FFC6" Margin="0,20,0,0">
<Button x:Name="btn" Content="iApp" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Visibility="{Binding IsMouseOver,ElementName=m_Border, Converter={StaticResource BooleanToVisibilityConverterKey}, ConverterParameter=Normal}"/>
</Border>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
我的转换器C#源代码:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
namespace WpfApplication1
{
public enum BooleanToVisibilityConverterType
{
Normal = 1,
Reverse = 2
}
public class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo …
Run Code Online (Sandbox Code Playgroud) ivalueconverter ×10
wpf ×10
c# ×7
.net ×2
xaml ×2
data-binding ×1
enums ×1
listview ×1
mvvm ×1