小编dea*_*ace的帖子

在XAML中使用boolean到颜色转换器

我正在研究WPF应用程序.我已将文本块绑定到我的按钮.当关联按钮的isEnabled为true时,我想将文本块的前景设置为黑色.我想用转换器做这个.但它不起作用.也没有给出任何错误.我在"Models"文件夹中声明了以下类.

public class BrushColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if ((bool)value)
        {
            {
                return System.Windows.Media.Colors.Black;
            }
        }
        return System.Windows.Media.Colors.LightGreen;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
Run Code Online (Sandbox Code Playgroud)

Button的启用,可从viewmodel更改属性(例如使用RaiseCanExecuteChanged)())

XAML中与textblock相关的东西是:

   <Window.Resources>
            <local:BrushColorConverter x:Key="BConverter"></local:BrushColorConverter>
   </Window.Resources>
<Button>(!..all button properties..!)</Button>
    <TextBlock x:Name="AnswerText"                                           
               Text="Answer"                                          
               Foreground="{Binding ElementName=AnswerButton,Path=IsEnabled, Converter={StaticResource BConverter}}"
               TextWrapping="Wrap"/>
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml converter

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

LINQ Where()和FirstOrDefault()之间的逻辑区别

我知道这听起来可能是重复的问题(比如这个或者这个)但是我想要清楚一下这个查询中会发生的数字迭代.

我的假设如下:

假设我收集了1000件商品.

  1. 在Where()查询中,它遍历每个项目并将其添加到IEnumerable.即它总是需要O(n).

    foreach (var item in myList)
    {
        if(//<condition>)
        {
            //add it to list/enumerable
        }
        //continue through entire list
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. FirstOrDefault(<condition>)查询中,它开始迭代集合并在获得与之匹配的项<condition>并且返回单个元素时立即中断循环,或者仅在没有项匹配的情况下断开循环,<condition>然后它将遍历整个列表.

所以复杂性可以从O(1)到O(n)

foreach (var item in myList)
{
    if(//<condition>)
    {
        //return item
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这是正确的,那么将FirstORDefault用于单个项目返回总是更好.

c# linq

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

使DataGrid单元格特定于多列

我提到这个答案,但它不起作用.列仍然会扩展为Row内容.重新排列单元格时,列大小会以某种方式更新

截图: ColumnSpan问题

我的习惯DataGridCellsPanel.ArrangeOverride:

protected override Size ArrangeOverride(Size arrangeSize)
{
    var firstCell = Children[0];
    firstCell.SetValue(Panel.HorizontalAlignmentProperty, HorizontalAlignment.Left);
    firstCell.Arrange(new Rect(arrangeSize));

    for (int i = 1; i < Children.Count; i++)
    {
        var remainingCell = Children[i];
        remainingCell.Arrange(new Rect(0,0,0,0));
    }
    return arrangeSize;
}
Run Code Online (Sandbox Code Playgroud)

我的DataGridRow.Template:

<Style x:Key="SpanRowStyle" TargetType="DataGridRow">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type DataGridRow}">
                <Border>
                    <DataGridCellsPresenter Foreground="Black">
                        <DataGridCellsPresenter.ItemsPanel>
                            <ItemsPanelTemplate>
                                <controls:DataGridSpannedCellPanel/>
                            </ItemsPanelTemplate>
                        </DataGridCellsPresenter.ItemsPanel>
                    </DataGridCellsPresenter>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)

请帮忙.

wpf datagrid

8
推荐指数
1
解决办法
743
查看次数

对于 ICommand 和 DelegateCommand 它运行在哪个线程上?

我的应用程序使用ICommands 将方法绑定到按钮。

我初始化这些命令如下:

AnswerCommand = new DelegateCommand(AnsCommandExecute, AnsCommandCanExecute);
Run Code Online (Sandbox Code Playgroud)

我想知道该AnsCommandExecute()方法是否适用于 UI 线程或后台线程?

如果它在 UI 线程上工作,我是否必须为此 execute() 方法创建另一个线程,因为我的应用程序在后台执行大量处理。

我的应用程序还使用 TCP 与另一应用程序进行通信。因此,为了获得更好的性能,我是否必须使用不同的线程来接收数据、处理和发送数据。对于此类应用程序,最佳的线程方法是什么?

wpf multithreading

5
推荐指数
1
解决办法
1625
查看次数

激活WPF窗口而不会失去对先前应用程序/窗口的关注

我在应用程序中有一个WPF窗口,我可以通过调用MainView.Activate();MainView.BringIntoView();方法在某些特定情况下激活它。它还将焦点设置在此“ MainView”窗口上。

但我的要求是,该窗口不应获得焦点。即我的光标仍应保留在以前的应用程序(记事本,单词等)上。

我尝试使用,MainView.ShowActivated="False"但是没有用。我需要使用此处提到的HwndSource 还是什么?

我在肯特的帮助下使用过的代码(仅在最小化Window的情况下才起作用):

IntPtr HWND_TOPMOST = new IntPtr(-1);
            const short SWP_NOMOVE = 0X2;
            const short SWP_NOSIZE = 1;
            const short SWP_NOZORDER = 0X4;
            const int SWP_SHOWWINDOW = 0x0040;

            Process[] processes = Process.GetProcesses(".");

            foreach (var process in processes)
            {
                IntPtr handle = process.MainWindowHandle;
                if (handle != IntPtr.Zero)
                {
                    SetWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_SHOWWINDOW);
                }
            }
Run Code Online (Sandbox Code Playgroud)

wpf focus window

5
推荐指数
3
解决办法
5023
查看次数

在XAML中设置按钮的闪烁效果

我的要求是我想在点击button1时在button2上设置闪烁效果.我确实引用了这个例子来对文本块进行闪烁效果.

闪烁TextBlock

但它不适用于我的button2.如果你愿意,我可以告诉你xaml代码.请帮助我.谢谢.

.net wpf xaml

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

如何在 New-AzSqlSyncMember 中设置 -DefaultProfile(IAzureContextContainer 类型)的值

我正在尝试创建一个 powershell 脚本来在 2 个 azure SQL 数据库之间创建 azure 数据同步。我的会员数据库位于另一个订阅上。

我需要设置 -DefaultProfile,其类型为“New-AzSqlSyncMember”命令。我不知道设置此参数的语法。

我当前没有 -DefaultProfile 的脚本如下所示:

New-AzSqlSyncMember -ResourceGroupName $resourceGroupName `
                    -ServerName $serverName `
                    -DatabaseName $databaseName `
                    -SyncGroupName $syncGroupName `
                    -Name $syncMemberName `
                    -MemberDatabaseType $memberDatabaseType `
                    -SyncDirection $syncDirection
Run Code Online (Sandbox Code Playgroud)

我想使用 powershell 设置订阅字段的值,如下图所示使用 powershell:

设置数据同步会员订阅

azure azure-data-sync azure-powershell azure-sql-database

3
推荐指数
1
解决办法
5751
查看次数

将DynamicResource绑定到BasedOn Style

我的要求是在具有以下情况的文本框上应用多个样式:

  1. 我有一个风格(如MyTextStyle)在另一个文件中说" Generic.xaml "
  2. 我的文本框在ABC.xaml中
  3. 我想对这个Textbox应用一些触发器,所以我必须使用Textbox.Style
  4. 我也想申请" MyTextStyle "

当我做跟随它给我错误,我不能将DynamicResource应用于BasedOn:

<TextBox.Style>
                    <Style BasedOn="{DynamicResource MyTextStyle}" TargetType="{x:Type TextBox}">
                        <Setter Property="Text" Value="{Binding SelectedCall.Name}" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding SelectedCall.Name}" Value="N/A">
                                <Setter Property="Text" Value="" />
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </TextBox.Style>
Run Code Online (Sandbox Code Playgroud)

请建议我一些解决方案,以便我可以应用此Dynamicresource以及我的数据触发器样式

wpf xaml

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

仅限数字的正则表达式加上'h'字符

我只想在字符串中的任何地方包含数字和/或"h"或"H"字符时验证字符串.

例如

123 - 有效
123h - 有效
1h23 - 有效
h234 - 有效
123H - 有效
asdf - 无效
123d - 无效

我能够仅限数字字符串,但不能满足h的额外要求.我怎样才能做到这一点?

c# regex

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

将鼠标悬停效果添加到XAML中带有Image的按钮

我有一个带有Image的按钮,如下所示:

<Button Width="22" Height="22" Command="{Binding PreviousCommand}">                               
  <Button.Template>
    <ControlTemplate>
      <Image Source="C:\Users\abcdef\Desktop\Slide-To-Left-Arrow-24.png"></Image>                            
    </ControlTemplate>
  </Button.Template>
  <Button.InputBindings>
    <KeyBinding Key="Up" Command="{Binding PreviousCommand}" Modifiers="Alt+Shift" />
  </Button.InputBindings>
</Button>
Run Code Online (Sandbox Code Playgroud)

我想应用一些鼠标悬停效果来识别按钮是可点击/可聚焦的.我尝试添加触发器如下,但它无法正常工作:

<ControlTemplate.Triggers>
  <Trigger Property="IsMouseOver" Value="True"> 
    <Setter Property="Background" Value="Black" /> 
  </Trigger>
</ControlTemplate.Triggers>
Run Code Online (Sandbox Code Playgroud)

它不起作用.我需要做什么?请帮帮我.

wpf xaml styles button

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

用MONO编写的程序与.net框架上的程序一样高效

我正在研究WPF.我刚刚发现了这个MONO项目,所以我对MONO很新鲜.我想知道在mono上编写的程序和在.net framework 4.0上编写的程序一样快速有效.它是否像编译一样使用相同的JIT.如果没有,那么也会进行任何研究.

.net mono

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

字体大小未应用于datagrid列标题

我有一个wpf数据网格,我在其中通过C#添加所有列和样式.

我已经应用了ColumnHeaderStyle,如下所示:

  1. 书面的二传手:

    var fontSizeSetter = new Setter {Property = Control.FontSizeProperty, Value = Convert.ToDouble(font.Size)};

  2. 风格为:

            var headerStyle = new Style();
            headerStyle.Setters.Add(fontSetter);
            headerStyle.Setters.Add(fontSizeSetter);
            headerStyle.Setters.Add(fontStyleSetter);
            headerStyle.Setters.Add(fontWeightSetter);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将它应用于我的Datagrid'sColumnHeaderStyle:

view.DataGrid.ColumnHeaderStyle = headerStyle;

当前问题:现在,当我设置FontFamilyFontStyle时,它会被应用.但列标题文本大小保持不变.它没有得到更新. 在此输入图像描述

整个方法:

private static void ConfigureFontsForDataGrid(Views.StatusMonitor view, StatusMonitorAgencyFontType font)
        {
            var fontfamily = new FontFamily(font.Font);
            var fontSetter = new Setter { Property = Control.FontFamilyProperty, Value = fontfamily };
            var fontSizeSetter = new Setter { Property = Control.FontSizeProperty, Value = Convert.ToDouble(font.Size) };
            var fontStyleSetter = …
Run Code Online (Sandbox Code Playgroud)

c# wpf

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