小编Buc*_*uck的帖子

没有验证错误WPF时,工具提示不显示

我搜索并没有看到解决方案.

如果我没有在组合框tooltip属性中设置工具提示,我只能获得验证以显示工具提示.我希望看到验证错误工具提示,否则显示组合框属​​性中的工具提示.当我从tooltip属性中删除文本时(即从组合框的属性面板中),验证工具提示显示正常.

Application.Resources(App.XAML)中的XAML用于显示验证错误的工具提示

    <Style x:Key="StandardComboBoxStyle" TargetType="{x:Type ComboBox}">
    <Style.Triggers>
        <Trigger Property="Validation.HasError" Value="True">
            <Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

我还使用了Combobox的验证模板,如下所示.这是在用户控件cs文件中的UserControl.Resources部分.

<ControlTemplate x:Key="comboBoxValidationTemplate">
    <DockPanel Name="myDockPanel">
        <Border BorderBrush="Red" BorderThickness="3">
            <AdornedElementPlaceholder Name="MyAdorner" />
        </Border>
        <TextBlock Text="*" FontWeight="Bold" FontSize="18" Foreground="Red" DockPanel.Dock="Left" />
    </DockPanel>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

控件本身定义如下.请注意,这里没有定义其他引用(但希望不相关 - 如果问题,请随时告诉我).

        <ComboBox x:Name="ExposureTime" SelectedValuePath="Content"
        Text="{Binding ExposureTime, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" IsEditable="True" Validation.ErrorTemplate="{StaticResource comboBoxValidationTemplate}"
        HorizontalContentAlignment="Right" FontSize="18" Margin="136,47,462,0" Height="27" VerticalAlignment="Top" GotFocus="ComboBox_GotFocus_1" LostFocus="ComboBox_LostFocus_1" PreviewTextInput="ExposureTime_PreviewTextInput" Opacity="{Binding BackgroundOpacity, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontWeight="Thin" Style="{DynamicResource StandardComboBoxStyle}" SelectedValue="{Binding Mode=OneWay, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" IsTextSearchEnabled="False" ToolTip="My tooltip test.">
        <ComboBoxItem …
Run Code Online (Sandbox Code Playgroud)

validation wpf xaml tooltip idataerrorinfo

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

视图中的多个数据上下文

我已经尝试了几次在帖子中找到答案但尚未找到答案(至少在我理解的情况下,因为WPF相当新).

我在视图构造函数中定义了一个数据上下文:

this.DataContext = viewModel;
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我想在一个视图中使用多个数据上下文?我从其他人那里听到了多个不一致的答案.目标是我需要访问多个视图模型中的属性.例如,我的视图XAML用于如下所示的情况:

<MultiBinding Converter="{StaticResource multiBooleanToVisibilityConverter}">
                <Binding Path="ResultControlsVisibileByDefault" UpdateSourceTrigger="PropertyChanged"/>
                <Binding Path="StarWidthValueList.Count" UpdateSourceTrigger="PropertyChanged"/>
            </MultiBinding>
Run Code Online (Sandbox Code Playgroud)

如果我可以在适当的视图模型中显式引用每个属性,那将会很棒.

注意:有多个基于窗口的视图模型覆盖在主窗口中.它们基于用户进行的类似向导的选择而变为活动状态.

c# wpf xaml binding wpf-controls

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

TortoiseGit/Winforms:合并时解析Resource.resx

我是TortoiseGit的新手.想知道,如果我在.resx文件上发生冲突,如何在合并期间解决它?例如,我可以从菜单中选择"使用他们的",尝试拉动和推动,但这是正确的方法吗?我可以以某种方式使用他们的,并通过我的项目更改重建它?差异(以及与存储库相比的混合内容)很多 - 要做很多真正的合并.谢谢你的期待?

c# git git-merge tortoisegit winforms

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

顶级任务导致错误"当前的SynchronizationContext可能不会用作TaskScheduler."

我还没有看到答案,尽管我已经查看了stackoverflow和文档.

如果我调用从计时器处理程序或其他任务创建任务的代码,则此错误将在下面的ContinueWidth上出现.例如,如果它被包装在另一个任务中,每个间隔(例如每1秒)创建一个任务,如下所示.我有高级别任务的唯一原因是每个间隔创建这些较低的任务.

//更高级别的任务创建

...

Task task = Task.Factory.StartNew(new Action(UpdateAllDuringInterval));
Run Code Online (Sandbox Code Playgroud)

...

    private void UpdateAllDuringInterval()
    {
        Stopwatch stopWatch = new Stopwatch();

        do
        {
            // Start the stopwatch
            stopWatch.Start();

            // Create tasks
            List<Task> tasks = CreateTasksAndStart();

            // Wait for the tasks to complete if testing, since want to check results
            if (this._testMode)
            {
                Task[] taskArray = tasks.ToArray();
                Task.WaitAll(taskArray);
            }

            if (!_testMode)
            {
                // Get remaining time to complete interval and sleep for that time
                int remainingTimeInMilliseconds = this._pollingIntervalInMilliseconds -
                                                  (int) stopWatch.Elapsed.TotalMilliseconds;
                    // truncating …
Run Code Online (Sandbox Code Playgroud)

c# wpf multithreading task

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

在WinForms中,UI中可能有多个线程吗?

我认为答案是肯定的.我在stackoverflow上检查了类似的问题,但它们似乎根据特定解决方案所需的内容(但可能已经错过了某些内容)进行了不同的指示.

是否有可能在WinForms应用程序中拥有多个UI线程?我正在重构并想知道是否应该使用ConcurrentDictionary或Dictionary来访问那些访问表单的线程.这是针对具有多个开发人员/设计的更大代码,我希望尽可能选择(但不要过度设计).由于我正在寻找一般性答案,因此细节不在这个问题中,尽管它们通常都是.感谢您的期待和任何帮助 - 非常感谢.

c# multithreading winforms

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

使用Is运算符和值类型C#

我错过了什么?我没有在stackoverflow上看到答案,但可能错过了它.对于这种情况,似乎"是"运算符应该工作(即评估为真)

short j = 1;
int k = 2; 

if (j is int)
   Console.WriteLine("all values of j will fit into k");
else
   Console.WriteLine("all values of j will not fit into k");
Run Code Online (Sandbox Code Playgroud)

我尝试使int和short nullable也没有用.条件成立的基本原理是short的所有值都适合int类型的变量(基于结果可能是错误的 - 即"If(j is in)"的计算结果为false.谢谢

c# casting typechecking

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

添加数据后如何滚动到 ListView 的末尾 - WPF

我尝试在按钮单击处理程序中添加以下内容:

        ListView listView = MyListView;
        int lastItemIndex = listView.Items.Count - 1;
        listView.ScrollIntoView(listView.Items[lastItemIndex]);
        listView.UpdateLayout();
Run Code Online (Sandbox Code Playgroud)

按钮单击还与命令处理程序相关联,该命令处理程序将项目添加到与 ListView 关联的 ObservableCollection。

问题是按钮单击处理程序在我的命令处理程序之前调用,因此为时过早。在按钮单击处理程序中,ListView 还没有看到带有添加项的更新 ObservableCollection。什么事件或者更好的是,在我的项目添加到 ObservableCollection 后,如果不更改背后的代码以使 ListView 滚动到末尾,我可以做什么?我已经看过但在stackoverflow中还没有找到答案。谢谢!

c# wpf listview command event-handling

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

如何将ProgressBar放入Button中

我是WPF的新手,并没有试图将进度条放在按钮上.我之前提出的问题是:StackOverflow Post.任何有关如何正确执行此操作的帮助将不胜感激.我没有在StackOverflow上看到另一篇文章来解决这个问题.理想情况下,让按钮(1)的文本垂直居中(即通常显示在按钮中)和(2)文本下方的进度条会很棒.该按钮的默认高度为2倍,以便为进度条留出空间.我可以调整你想出的任何东西的位置和间距.我对正确完成绑定以更新进度条非常感兴趣.

谢谢!巴克

c# wpf xaml button progress-bar

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

在C#Object Instantiation中,如果捕获异常,则需要进行空检查

我一直在寻找stackoverflow,但还没有看到ansswer.注意:我确实在C++中看到了一些好的响应,但没有看到C#.

检查null是否有任何好处,if (reader == null)如下所示,或者导致它为null的问题已导致异常if (reader == null)无法访问(reader == null为true)?

try
{
    var reader = new PhotoReader();
    if (reader == null)
    {
        throw new InvalidOperationException("PhotoReader could not be created.");
    }
}
catch (Exception ex)
{
    // let user know failed object creation, etc.
    <...>
}
Run Code Online (Sandbox Code Playgroud)

c# null instantiation

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