小编Roh*_*ats的帖子

MultiDataTrigger与具有多重绑定的DataTrigger

我遇到了一个情况,我可以用它来轻松实现相同的功能MultiDataTrigger,或者交替,使用DataTriggerMultiBinding.是否有任何实质性理由偏好一种方法而不是另一种方法?

使用MultiDataTrigger:

<MultiDataTrigger>
    <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding Path=SomePath}" Value="SomeValue"/>
        <Condition Binding="{Binding Path=SomeOtherPath, Converter={StaticResource SomeConverter}}" Value="SomeOtherValue"/>
    </MultiDataTrigger.Conditions>
    <MultiDataTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/>
    </MultiDataTrigger.EnterActions>
</MultiDataTrigger>
Run Code Online (Sandbox Code Playgroud)

使用MultiBinding:

<DataTrigger Value="foo">
    <DataTrigger.Binding>
        <MultiBinding Converter="{StaticResource fooConv}"/>
            <Binding Path=SomePath/>
            <Binding Path=SomeOtherPath/>
        </MultiBinding>
    </DataTrigger.Binding>
    <DataTrigger.EnterActions>
        <BeginStoryboard Storyboard="{StaticResource MyStoryboard}"/>
    </DataTrigger.EnterActions>
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

wpf datatrigger multitrigger multibinding

29
推荐指数
2
解决办法
2万
查看次数

如何删除额外的列Datagrid

我已将itemsource绑定到Datatable for Datagrid.它显示了如何删除它的额外列

我的代码:

<DataGrid Name="dataGrid"  IsReadOnly="True"  VerticalAlignment="Top"
          ItemsSource="{Binding Cus}" AutoGenerateColumns="True"/>
Run Code Online (Sandbox Code Playgroud)

它显示额外的列如何删除它?

截屏: 在此输入图像描述

wpf datagrid

19
推荐指数
3
解决办法
3万
查看次数

绑定到父datacontext(在itemsource之外)

在我的Windows Phone 8应用程序中,我有项目列表.我为列表项定义了ItemTemplate.

我想在每个项目中显示一个来自视图模型的值,而不是列表项本身.我应该如何设置从列表项到viewmodel的绑定.

我的数据模板是这样的:

<DataTemplate x:Key="template">
    <StackPanel>
        <TextBlock Text="{Binding Name}"/> <!-- From list item -->
        <TextBlock Text="{Binding MyViewModel.Country ?? }"/> <!-- From view model -->
    </StackPanel>  
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

那么如何将Country属性绑定到视图模型,而不是列表项(在项目源中).

wpf binding mvvm caliburn.micro windows-phone-8

17
推荐指数
1
解决办法
2万
查看次数

绑定到资源键,WPF

我有一个带有一些图像的ResourceDictionary:

<BitmapImage UriSource="..\Images\Bright\folder-bright.png"
             x:Key="FolderItemImage" />
Run Code Online (Sandbox Code Playgroud)

我创建了一个HierarchicalTemplatefor treeview项,如下所示:

<HierarchicalDataTemplate ItemsSource="{Binding VisibleChildren}"
                          DataType="{x:Type st:StructureTreeItem}">
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding ImageResourceKey}" />
        <Image x:Name="iIcon2" Source="{DynamicResource FolderItemImage}"/>
        <Image x:Name="iIcon"
               Source="{DynamicResource {Binding ImageResourceKey}}"/>
    </StackPanel>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)

现在,当显示项目时:

  • 文本块显示 FolderItemImage
  • 显示第一张图片
  • 未显示第二张图像.

整个想法是将项目图像设置为存储在资源中的图像,但不幸的是,上面介绍的技术不起作用,现在我知道,为什么:

<Image x:Name="iIcon3" Width="16" Height="16" Margin="0, 1, 3, 1" >
    <Image.Source>
        <DynamicResource ResourceKey="{Binding ImageResourceKey}" />
    </Image.Source>
</Image>
Run Code Online (Sandbox Code Playgroud)

结果:

PresentationFramework.dll中发生未处理的"System.Windows.Markup.XamlParseException"类型异常

附加信息:无法在"DynamicResourceExtension"类型的"ResourceKey"属性上设置"绑定".'绑定'只能在DependencyObject的DependencyProperty上设置.

所以我必须重新解释一下我的问题:如何将模型中存储的某些数据(可能是?)转换为动态资源?它必须是一个动态资源,因为我确信它可能会在运行时发生变化.

c# wpf binding dynamicresource

12
推荐指数
3
解决办法
2万
查看次数

隐藏TextBlock中的<Run />标记 - WPF

我有两个Run标签的文本块和一个Linebreak:

  <TextBlock>
      <Run Text="TopText"/>
      <LineBreak/>
      <Run x:Name="bottomRun" Text="Bottom text"/>
  </TextBlock>
Run Code Online (Sandbox Code Playgroud)

我想Run在代码中隐藏第二个标签.但是没有Visible财产......为什么会这样?如何只隐藏一个Run标签的最佳解决方案是什么?

wpf

10
推荐指数
3
解决办法
7007
查看次数

获取在c#中转换为动态的数组的计数

考虑以下代码:

  static void Main(string[] args)
  {
      var ints=new List<int> {10,11,22};
      Something(ints);//Output:Count is:3
      Something(new int[10]); //'System.Array' does not contain
                              //  a definition for 'Count'
      Console.ReadLine();     
  }
  static void Something(ICollection collection)
  {
      dynamic dynamic = collection;
      Console.WriteLine("Count is:{0}", dynamic.Count);
  }
Run Code Online (Sandbox Code Playgroud)

通过List时,一切都还可以.但是当传递数组并转换为动态我得到这个错误:'System.Array' does not contain a definition for 'Count'.

我知道我的解决方案是什么,但我想知道为什么编译器有这种行为?

c#

10
推荐指数
1
解决办法
7072
查看次数

应用MahApps.Metro Dark主题

我是WPF的新手,我正在尝试将Windows Metro Dark主题应用到我的整个应用程序中.

我在Apps.xaml中使用了以下内容,我可以正确地看到Windows Metro Light主题.

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)

现在我想将主题改为黑暗.我明白我总是可以用,

ThemeManager.ChangeTheme()

但我相信应该有一种方法可以使用XAML对应用程序的所有窗口都有效.

我的问题: 如果不在源代码中使用ThemeManager,有人能指出我如何做到这一点吗?

.net c# wpf xaml mahapps.metro

10
推荐指数
1
解决办法
1万
查看次数

WPF中的BindingOperations.EnableCollectionSynchronization之谜

我一直在努力掌握这个概念,即使经过多次实验,我仍然无法弄清楚WPF中的ObservableCollections和使用BindingOperations.EnableCollectionSynchronization的最佳实践.

如果我有一个带有可观察集合的viewmodel,我使用锁启用集合同步,如下所示:

m_obsverableCollection = new ObservableCollection<..>;
BindingOperations.EnableCollectionSynchronization(m_obsverableCollection,
                                                   m_obsverableCollectionLock);
Run Code Online (Sandbox Code Playgroud)

这是否意味着对该可观察集合的每次修改和枚举都将:

  1. 使用m_obsverableCollectionLock自动锁定集合?
  2. Marshall对创建集合的线程的所有修改?
  3. Marshall对绑定操作调用的线程进行了所有修改?

使用BindingOperations.EnableCollectionSynchronization时,我是否需要显式执行任何类型的锁定?

产生这一切的问题是,即使在使用BindingOperations.EnableCollectionSynchronization并使用我传入该方法的相同锁定锁定项目后,我偶尔会得到"这种类型的CollectionView不支持从不同于该线程的线程更改其SourceCollection调度员线程." 例外

.net c# wpf

9
推荐指数
2
解决办法
4151
查看次数

使用StringFormat的WPF格式标签

我有一个WPF应用程序.我有一些标签和一些数据网格绑定到一些公共属性.其中一些属性是数值.

在datagrids中,我一直在使用下面的行来确保这些值只显示两个小数位,这是有效的.但是,当我使用下面相同的行作为我的标签时,它似乎对显示没有影响,因为数字显示为大约9位小数.我不明白为什么它适用于datagrid但不适用于标签?

StringFormat={}{0:0.##}



<Label Grid.Row="3" Grid.Column="1"
       Content="{Binding Obs.Tstat, StringFormat={}{0:0.#}}" 
       HorizontalAlignment="Center" Foreground="{StaticResource brushLinFont}" 
       FontSize="13" FontWeight="Bold"/>
Run Code Online (Sandbox Code Playgroud)

更新的代码

 <Label Grid.Row="3" Grid.Column="1"
        Content="{Binding Obs.Tstat}" ContentStringFormat="{}{0:0.#}}" 
        HorizontalAlignment="Center" Foreground="{StaticResource brushLinFont}" 
        FontSize="13" FontWeight="Bold"/>
Run Code Online (Sandbox Code Playgroud)

c# wpf

9
推荐指数
1
解决办法
1万
查看次数

将按位枚举映射到sql列值

我有一个按位枚举,FlagsAttribute像这样设置 -

[FlagsAttribute]
public enum MyEnum
{
    None = 0,
    First = 1,
    Second = 2,
    Third = 4,
    Five = 8,
    Six = 16,
    Seven = 32,
    Eight = 64,
    Nine = 128
}
Run Code Online (Sandbox Code Playgroud)

现在,在C#中,我将此值存储在属性中,例如MyProperty,在保存时,我在整数列的SQL数据库中写入此属性.假设我First,Second,Five从代码中选择然后在数据库中将其保存为'11'.

我知道我可以从DB中获取值,只需要将值转换为MyEnum,它就会给我值.但是,我希望在一些存储过程中对SQL数据进行一些操作,显然我不能将它转换为Enum值.那么,有没有出路可以让我了解个人价值观.

就像在示例中如果存储了11,我可以将其作为任何方式 "1+2+8"

c# sql t-sql sql-server wpf

8
推荐指数
2
解决办法
4973
查看次数