对于单个绑定,我们使用:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}">
<Binding Path=EmployeeName/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
或更短的语法:
<TextBlock
Text="{MultiBinding StringFormat=\{0\}, Bindings={Binding Path=EmployeeName}}"/>
Run Code Online (Sandbox Code Playgroud)
现在,如果你有多重绑定:
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}, {2}">
<Binding Path="EmployeeName"/>
<Binding Path="Age"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
我想知道,它的短语法是什么?
<TextBlock
Text="{MultiBinding StringFormat=\{0\}, Bindings={Binding ??????}"/>
Run Code Online (Sandbox Code Playgroud) 我尝试了几种方法来分解WPF DataGrid中的单元格格式(.NET 4提供的格式):
我将描述我的尝试,因为它可能会帮助其他人,我希望有人可以给我建议,以改善这些解决方案.请注意,我对WPF相当新...
预期的行为是将单元格字符串格式化为特定类似"1,234,567"的内容以进行显示,但在编辑单元格时应将其格式化为"1234567"(其默认格式).当我尝试使用数据转换器时,我没有找到在编辑时使用默认格式的方法,因此我将精力集中在样式和模板上.
使用样式,DataGridTextColumn的定义如下:
<DataGridTextColumn Header="Price (Style)" SortMemberPath="BILL_PRICE">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="{Binding Path=BILL_PRICE, StringFormat={}{0:N0}}"/>
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding Path=BILL_PRICE}"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="BorderThickness" Value="0"/>
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)
行为正是预期的.但是,由于绑定,我无法分解这种风格并多次使用它.为了解决分解问题,我使用了DataGridTemplateColumn和数据模板.这是我的DataGridTemplateColumn定义:
<DataGridTemplateColumn Header="Price (Template)" SortMemberPath="BILL_PRICE">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding BILL_PRICE}" Template="{StaticResource CurrencyCellControlTemplate}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentControl Content="{Binding BILL_PRICE, Mode=TwoWay}" Template="{StaticResource CurrencyCellEditingControlTemplate}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
和ControlTemplate定义:
<ControlTemplate x:Key="CurrencyCellControlTemplate" TargetType="ContentControl">
<TextBlock Margin="2,0,2,0" Padding="0" TextAlignment="Right">
<TextBlock.Text>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Content" StringFormat="{}{0:N0}"/> …Run Code Online (Sandbox Code Playgroud) wpf datagrid string-formatting datagridtemplatecolumn datagridtextcolumn
我一直在研究.NET库来协助应用程序的国际化.它是用C#编写的,名为SmartFormat,在GitHub上是开源的.
它包含多种语言的语法数字规则,可根据模板和语言环境确定正确的单数/复数形式.规则是从Unicode语言复数规则获得的.
翻译具有依赖于数量的单词的短语(例如名词,动词和形容词)时,指定多个表单,格式化程序根据这些规则选择正确的表单.
英语示例:(注意语法几乎相同String.Format)
var message = "There {0:is:are} {0} {0:item:items} remaining.";
var output = Smart.Format(culture, message, items.Count);
Run Code Online (Sandbox Code Playgroud)
我想为许多支持的语言编写单元测试.但是,我只会说英语和西班牙语(两者都有相同的语法编号规则).
有哪些优秀的非英语测试用语可以用于这些单元测试?
我正在寻找类似的短语"There {0:is:are} {0} {0:item:items} remaining.".请注意此示例如何根据数量需要特定的动词和名词.
关于语法的说明:
此库查找:分隔的单词,并根据为语言环境定义的规则选择正确的单词.例如,在波兰语中,"文件"一词有3种复数形式:1"plik",2-4"pliki",5-21"plików".因此,您将在格式字符串中指定所有3个表单:"{0} {0:plik:pliki:plików}".
这些单词通常按从最小可能值到最大值排序,例如"{0:zero:one:two:few:many:other}",由Unicode语言复数规则定义.
这里已经讨论了有关此代码的其他信息:单数/复数单词的本地化 - 语法数字的不同语言规则是什么?
我想用前导零格式化带小数点的数字.
这个
>>> '3.3'.zfill(5)
003.3
Run Code Online (Sandbox Code Playgroud)
考虑所有数字甚至小数点.python中是否只有一个函数只考虑整个部分?
我只需要格式化不超过五位小数的简单数字.此外,使用%5f似乎考虑尾随而不是前导零.
所以,假设我有1400,我想将其转换为下午2:00
我尝试了以下方法:
Dim convertedTime As String = DateTime.ParseExact(theTime,"HHmm", Nothing)
Run Code Online (Sandbox Code Playgroud)
它会给我这个:
6/12/2012 02:00:00 PM
我不想要日期部分,我也不需要秒.我需要的只是下午2点
我怎么能实现这个目标?谢谢!
我有一个复数,我想使用fprintf命令作为文本输出.我没有看到复数的格式规范.是否有捷径可寻?
使用定点的格式规范仅输出实部.
我正在阅读这里提到的例子,我正在看这个例子.我在ipython上运行了一个示例示例,结果是一致的,即"%d"慢于"%s":
In [1]: def m1():
...: return "%d" % (2*3/5)
In [2]: def m2():
...: return "%s" % (2*3/5)
In [4]: %timeit m1()
1000000 loops, best of 3: 529 ns per loop
In [5]: %timeit m2()
1000000 loops, best of 3: 192 ns per loop
In [6]: from dis import dis
In [7]: dis(m1)
2 0 LOAD_CONST 1 ('%d')
3 LOAD_CONST 5 (6)
6 LOAD_CONST 4 (5)
9 BINARY_DIVIDE
10 BINARY_MODULO
11 …Run Code Online (Sandbox Code Playgroud) 有什么办法我只能在字符串格式中只替换第一个参数吗?像这样:
"My quest is {test}{}".format(test="test")
Run Code Online (Sandbox Code Playgroud)
我希望输出为:
"My quest is test {}
Run Code Online (Sandbox Code Playgroud)
{}我将在稍后更换第二个arg.
我知道我可以创建一个字符串:
"My quest is {test}".format(test="test")
Run Code Online (Sandbox Code Playgroud)
然后将它与剩余的字符串组合并创建新的字符串,但我可以一次性完成吗?
print('%24s' % "MyString") # prints right aligned
print('%-24s' % "MyString") # prints left aligned
Run Code Online (Sandbox Code Playgroud)
如何在中心打印?有快速的方法吗?
我不希望文本位于屏幕的中心.我想这是在市中心是 24位.如果我必须手动完成,那么添加相同的数字背后的数学是什么.文本之前和之后的空格?
我想使用资源文件发送电子邮件.在我的资源文件中,我使用了一个变量"EmailConfirmation",其值为"Hello {userName} ..."
在我的班上我用过:
public static string message (string userName)
{
return Resource.WebResource.EmailConfirmation
}
Run Code Online (Sandbox Code Playgroud)
问题是返回表示"Hello {userName}"而不是"Hello Toto".
python ×4
c# ×2
wpf ×2
.net ×1
binding ×1
datagrid ×1
localization ×1
matlab ×1
multibinding ×1
python-3.x ×1
time ×1
variables ×1
vb.net ×1
xaml ×1