小编Rac*_*hel的帖子

在代码后面应用Grid Star Size

如何以编程方式构造这段XAML?

<Grid Name="gridMarkets">
    <Grid.RowDefinitions>
        <RowDefinition Height="10" />
        <RowDefinition Height="*" MinHeight="16" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="10" />
        <ColumnDefinition Width="Auto" />
    </Grid.ColumnDefinitions>
 </Grid>
Run Code Online (Sandbox Code Playgroud)

它是动态解析和构造控件的优雅解决方案吗?

我想做点什么:

RowDefinition newRow = new RowDefinition();
newRow.Height = new GridLength(10);
newGrid.RowDefinitions.Add(newRow);
Run Code Online (Sandbox Code Playgroud)

但是我该如何指定*标志?

寻找任何一种想法来解决这个问题!谢谢!

c# wpf

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

DragDrop - DragEnter/DragLeave事件继续触发

我在Canvas上有一个拖放操作,当一个对象被拖入和拖出时,它应该做某事.我的问题是DragEnter/DragLeave事件在鼠标移动对象时继续触发,而不仅仅是在进入/退出时.鼠标移动得越快,事件发生的频率就越高.

Canvas DragOver事件移动了DraggedObject的Canvas.Top/Left,我认为这可能是我的问题,但我不知道如何解决这个问题.

wpf drag-and-drop

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

错误"指定的元素已经是另一个元素的逻辑子元素"?

我有一个TabControl,每个选项卡可以包含相同的UI,但具有不同的数据.在任何选项卡中,用户都可以单击按钮并弹出一个弹出窗口.这将Style属性设置为ViewModel,告诉它用于弹出UI的样式.Style绑定到附加到自定义PopupUserControl的自定义DependecyProperty.我的问题是,当弹出窗口的第二个副本在另一个选项卡中打开时,我收到以下错误(无论应用什么样式):

指定的元素已经是另一个元素的逻辑子元素.首先断开它.

ButtonClick命令:

MyViewModel vm = ((Button)sender).DataContext as MyViewModel;
if (vm != null)
{
    Style popupStyle = (Style)Application.Current.FindResource("SomePopupStyle");
    vm.EditPanelStyle= popupStyle ;
}
Run Code Online (Sandbox Code Playgroud)

这会触发Style上的PropertyChange事件

public Style EditPanelStyle
{
    get { return _editPanelStyle; }
    set
    {
        if (_editPanelStyle != value)
        {
            _editPanelStyle = value;
            OnPropertyChanged("EditPanelStyle");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这会触发ViewModelBase中的OnPropertyChanged事件

protected virtual void OnPropertyChanged(string propertyName)
{
    this.VerifyPropertyName(propertyName);

    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
    {
        var e = new PropertyChangedEventArgs(propertyName);
        handler(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

该错误发生在handler(this, e);ViewModelBase的行中

编辑

TabItem包含一个Canvas和一堆可以添加/删除/移动/等的面板.每个Panel都有自己的资源目录.从Panel中我可以设置PopupStyle就好了,它可以毫无问题地应用.面板中使用的样式也在PanelResourceDictionary中定义.

与失败和成功的主要区别在于Style位于不同的位置.

编辑#2 …

wpf xaml mvvm

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

访问BindingContext [dataSource]和BindingContext [dataSource,dataMember]时有什么不同?

我们遇到了一个问题,在那里

  • 我们在MDI工作空间中有两个相同窗口的实例绑定到两个单独的对象模型.
  • 对象模型将其覆盖的方法.Equals.GetHashCode方法视为相等.
  • 调用.EndCurrentEdit()窗口2会触发窗口1的绑定更新
  • 两个窗口都设置为使用单独的a BindingContext

我们发现这个问题与调用有关

((PropertyManager)ctrl.BindingContext[dataSource]).EndCurrentEdit();
Run Code Online (Sandbox Code Playgroud)

如果我们改变它

((PropertyManager)ctrl.BindingContext[dataSource, dataMember]).EndCurrentEdit();
Run Code Online (Sandbox Code Playgroud)

它工作正常.如果我们删除我们的.Equals.GetHashCode覆盖,它也可以正常工作,因此两个对象模型不再被认为是相等的.

这对我来说没有意义,因为窗户是相同的,所以dataMember属性也是一样的.

这个链接,我相信这些调用的定义是:

public BindingManagerBase this[object dataSource] {
    get {
        return this[dataSource, ""];
    }
}

public BindingManagerBase this[object dataSource, string dataMember] {
    get {
        return EnsureListManager(dataSource, dataMember);
    }

internal BindingManagerBase EnsureListManager(object dataSource, string dataMember) {
    BindingManagerBase bindingManagerBase = null;

    if (dataMember == null)
        dataMember = "";

    // Check whether data source wants to …
Run Code Online (Sandbox Code Playgroud)

c# binding .net-3.5 winforms

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

为什么在使用WriteValue更新布尔绑定时会出现格式异常?

我的表单上有一堆Checkbox,其Checked属性绑定到数据模型上的Boolean属性:

chk1.DataBindings.Add(new BindingValue(this, "Checked", "MyBooleanProperty1", false))
chk2.DataBindings.Add(new BindingValue(this, "Checked", "MyBooleanProperty2", false))
chk3.DataBindings.Add(new BindingValue(this, "Checked", "MyBooleanProperty3", false))
Run Code Online (Sandbox Code Playgroud)

屏幕上的所有复选框都有一个共享事件处理程序,可确保将数据绑定值正确设置为选中的值.

private void AllCheckboxes_CheckedChanged(object sender, EventArgs e)
{
    var chk = ((CheckBox)sender);

    var binding = chk.DataBindings["Checked"];
    if (binding != null)
        binding.WriteValue();
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,第一次加载此表单和绑定时,我得到一个例外:

无法将值格式化为所需类型.

System.Windows上System.Windows.Forms.Binding.PullData(Boolean reformat,Boolean force)的System.Windows.Forms.BindToObject.SetValue(Object value)中的System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component,Object value) .Forms.Binding.WriteValue()

它适用于处理事件的第一个复选框,但第二个复选框将抛出此异常.

数据源是我的数据模型的接口

public interface IMyDataModel
{
    bool MyBooleanProperty1 { get; set; }
    bool MyBooleanProperty2 { get; set; }
    bool MyBooleanProperty3 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我可以通过在事件处理程序中的.WriteValue之前设置断点来验证数据模型本身是否设置正确.我甚至可以在绑定的布尔属性的setter中放置一个断点,并且它也被正确调用.

如果我将FormattingEnabled绑定的属性设置为true,它确实解决了问题.但我想知道为什么我首先必须这样做,因为我System.Boolean将UI对象中的bool属性绑定到数据源上的属性. …

c# data-binding binding .net-3.5

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

为什么我的tempdb在服务器重启时重置权限?

过去两次我们重新启动了我们的sql server,我们的网站已经关闭了.原因似乎是因为tempdb正在重新创建,并且ASPState用户失去了对tempdb的读/写权限(它是一个ASP站点,会话数据存储在sql server中)

直到大约两周前,这不是问题.有谁知道如何阻止sql server重启后重置tempdb权限?或者为什么这最近才开始发生?我们正在使用MS SQL Server 2005.

asp.net permissions sql-server-2005 session-state tempdb

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

是否有一种简单的方法可以使EntityFramework使用SQL默认值?

例如,我的大多数实体都有DateCreated和DateModified字段.这些默认设置在SQL Server中设置为GetUtcDate().

如果我尝试创建一个实体并且不设置这些值,我会得到一个异常,说它无法运行SQL插入,因为日期值超出范围.有意义,因为C#默认日期是1/1/0001,而SQL Server的最小日期是1/1/1753.

那么有没有办法告诉EF要么使用SQL Server默认值,要么尝试插入尚未设置的列?

c# sql-server entity-framework

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

我应该将UserControl用于我的视图而不是DataTemplates吗?

我正在阅读这篇文章,作者提出了使用DataTemplates定义ViewModel的建议,这是一种疯狂的方式(#7).我一直这样做,真的那么糟糕吗?

<DataTemplate DataType="{x:Type local:MyViewModel}">
    <Grid>
        ...
    </Grid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我的大多数视图都只是一个定义一个或两个DataTemplate的ResourceDictionary.对我而言,这比为每个ViewModel创建UserControl更有意义.为什么我不想在WPF的可视化树中使用额外的图层?当DataTemplate为我做这件事时,为什么我要照顾将ViewModels映射到Views?这种语法真的是一种"疯子式"吗?

wpf user-controls view datatemplate mvvm

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

当应用程序退出时,我如何等待异步操作完成?

如果用户执行操作(例如删除项目),则会立即将其从UI中删除,然后使用TPL在后台线程上将其从数据库中删除.问题是如果用户在后台线程完成之前退出应用程序,该项目实际上永远不会被删除.

在关闭应用程序之前是否存在等待异步操作完成的标准方法?

我的异步调用看起来像这样:

if (MyObjectList.Contains(obj)) MyObjectList.Remove(obj);
Task.Factory.StartNew(() => DAL<MyEntities>.DeleteObject(obj));
Run Code Online (Sandbox Code Playgroud)

更新

这是我最后的代码.我很高兴看到它能够正常工作,但是如果我能改进的话,请告诉我.我还有很多东西需要学习:)

public partial class App : Application
{
    private List<Task> _backgroundTasks = new List<Task>();

    public App()
    {
        EventSystem.Subscribe<TaskStartedMessage>((e) =>
        {
            _backgroundTasks.Add(e.Task);
        });

        EventSystem.Subscribe<TaskEndedMessage>((e) =>
        {
            if (_backgroundTasks.Contains(e.Task))
                _backgroundTasks.Remove(e.Task);
        });
    }

    protected override void OnExit(ExitEventArgs e)
    {
        Task.WaitAll(_backgroundTasks.Where(p => !p.IsCompleted).ToArray(), 30000);

        base.OnExit(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

在开始一项重要的后台任务时,我正在使用以下语法:

var task = Task.Factory.StartNew(() => DAL<MyEntities>.DeleteObject(obj));
EventSystem.Publish<TaskStartedMessage>(new TaskStartedMessage(task));
await task;
EventSystem.Publish<TaskEndedMessage>(new TaskEndedMessage(task));
Run Code Online (Sandbox Code Playgroud)

我正在使用AsyncCTP for await/ async,而Microsoft Prism EventAggregator用于事件系统.

c# wpf asynchronous task-parallel-library

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

如何根据网格样式设置网格中任何子元素的前景色?

如何在网格样式中设置Foreground所有子元素的颜色Grid?我知道我以前做过这个,但我不记得在哪里或如何.

<Style x:Key="MyGridStyle" TargetType="{x:Type Grid}">
    // I want to set the font color here
</Style>

<Grid Style="{StaticResource MyGridStyle}">
    ...
</Grid>
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用

<Grid.Resources>
    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="Foreground" Value="Red" />
    </Style>
    <Style TargetType="{x:Type TextBox}">
        <Setter Property="Foreground" Value="Red" />
    </Style>
</Grid.Resources>
Run Code Online (Sandbox Code Playgroud)

但是我想把这个值设置在Style,而不是在Grid

wpf xaml styles

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