在列表中List<MyClass> ListOfMyClasses,如何GroupId使用LINQ 获取有多少不同的属性值?
public class MyClass
{
public int GroupId;
}
Run Code Online (Sandbox Code Playgroud)
例如,假设我们有这个列表:
ListOfMyClasses: {MyClass1 (GroupId = 1), MyClass2 (GroupId = 3), MyClass3 (GroupId = 1)}
Run Code Online (Sandbox Code Playgroud)
这里我们应该得到结果为2(GroupId的两个不同的数字).
我要问的是部分与设计模式有关.
可以说我有一个IDrawing界面.另外两个名为TextDrawing和ShapeDrawing的基本类实现了这个,我有一个知道如何绘制这些类的View类!
但是我有更复杂的绘图类,它们也实现了IDrawing接口,但它们本身由几个IDrawing类组成!
如何在我的View类中绘制这些?显然教会View类来绘制每个新的IDrawing并不是一个好主意!但我还有其他选择吗?也许设计不正确?如何告诉View的Draw方法知道复杂类的原始部分并绘制它们?
public interface IDrawing
{
}
public class TextDrawing : IDrawing
{
}
public class ShapeDrawing : IDrawing
{
}
public class SignDrawing : IDrawing
{
public TextDrawing Text { get; set; }
public ShapeDrawing Border { get; set; }
}
public class MoreComplexDrawing : IDrawing
{
public TextDrawing Text { get; set; }
public ShapeDrawing Border1 { get; set; } …Run Code Online (Sandbox Code Playgroud) 而不是大多数人第一次学习Winforms然后搬到了WPF,我是相反的!由于某些关于图形性能的原因,我必须使用Winforms.但是我坚持第一步.如何使UI响应像WPF一样.Grids在Winforms中相当于什么.任何帮助都非常感谢.
我使用DrawingContext.DrawText和DrawingContext.PushTransfrom创建在WPF视觉层旋转的文本,但正如你在下面的图片中看到的,旋转的文本是在图像的某些区域,而模糊的..
有什么我可以用来改善的选择吗?该宋体字体用于文本。

public class BeamTextDrawing : FrameworkElement
{
private readonly VisualCollection _visuals;
public BeamTextDrawing(double scale)
{
if (scale <= 0)
{
scale = 1;
}
var typeface = Settings.BeamTextTypeface;
var cultureinfo = Settings.CultureInfo;
var flowdirection = Settings.FlowDirection;
var textsize = Settings.BeamTextSize / scale;
var beamtextcolor = Settings.InPlanBeamTextColor;
_visuals = new VisualCollection(this);
foreach (var beam in Building.BeamsInTheElevation)
{
var drawingVisual = new DrawingVisual();
using (var dc = drawingVisual.RenderOpen())
{
var text = Convert.ToString(beam.Section.Id);
//text = …Run Code Online (Sandbox Code Playgroud) 如何在代码隐藏中显示工具提示?下面的代码更好地定义了我的问题.显然我不希望代码检查鼠标位置等,只是如何显示工具提示.
private void UIElement_OnMouseMove(object sender, MouseEventArgs e)
{
// if mouse position equals certain coordinates show the tooltip
}
Run Code Online (Sandbox Code Playgroud) 我想将Blink动画应用于一个动画,Canvas以便我在其上绘制的所有对象都会闪烁.
我使用下面的代码有点成功,它改变了相当快的Opacity属性Canvas来实现这个效果,但我有点不满意.
我希望FadeOut/FadeIn在我当前的代码中没有任何纯闪烁.我怎么能以正确的方式做到这一点?
var blinkAnimation = new DoubleAnimation
{
From = 1,
To = 0
};
var blinkStoryboard = new Storyboard
{
Duration = TimeSpan.FromMilliseconds(500),
RepeatBehavior = RepeatBehavior.Forever,
AutoReverse = true
};
Storyboard.SetTarget(blinkAnimation, MyCanvas);
Storyboard.SetTargetProperty(blinkAnimation, new PropertyPath(OpacityProperty));
blinkStoryboard.Children.Add(blinkAnimation);
MyCanvas.BeginStoryboard(blinkStoryboard);
Run Code Online (Sandbox Code Playgroud)
也许我可以使用VisibilityProperty它来做到这一点,但我无法做到这一点.
我正在尝试使用Backgroundworker(或者如果不可能使用其他方法)同时执行两个单独的方法来获得性能.这个想法是在方法上做大量的计算.
有可能吗?
private readonly BackgroundWorker _worker = new BackgroundWorker();
private readonly BackgroundWorker _worker2 = new BackgroundWorker();
public MainWindow()
{
InitializeComponent();
_worker.WorkerReportsProgress = true;
_worker.WorkerSupportsCancellation = true;
_worker.DoWork += worker_DoWork;
_worker.RunWorkerAsync();
_worker2.WorkerReportsProgress = true;
_worker2.WorkerSupportsCancellation = true;
_worker2.DoWork += worker_DoWork2;
_worker2.RunWorkerAsync();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
// Do something
}
private void worker_DoWork2(object sender, DoWorkEventArgs e)
{
// Do something simultaneously with worker_DorWork
}
Run Code Online (Sandbox Code Playgroud) 我正在写一个CAD程序.假设我在输入类中,该类从文本文件中读取各种数据并创建大量列表/字典......这些数据需要通过其他类中的其他方法进行修改.现在这是我到目前为止的方式:
我有一个静态类:Building.cs当我创建/或加载项目时,此类包含所有数据,如列,梁,点等列表.所有这些都存储为私有字段.我可以使用类的公共方法(如GetColumns或GetPoints)访问这些...
现在我也有非静态类.它们包含2-3种公共方法.并在建筑物的各个部分做一些事情.
public static class Building
{
private static List<Column> columns;
private static List<Beams> beams;
private static List<Points> points;
public static List<Column> GetColumns()
{
return Columns;
}
}
public class ColumnsService()
{
private List<Columns> columns;
public GroupColumns(List<Columns> columns)
{
this.columns = columns;
}
public void Group()
{
// group columns
}
}
var columns = Building.GetColumns();
var columnsService = new ColumnsService(columns);
columnsService.Group();
Run Code Online (Sandbox Code Playgroud)
我想知道这是要走的路吗?我还能如何存储数据.在整个程序的整个生命周期中,大多数类都需要访问数据.什么是最佳实践.
我正在尝试使用代码隐藏同时为a TranslateTransform和ScaleTransforma 设置动画.我研究了一些类似的问题,但我有些问题,我仍然坚持第一步.RectangleStoryBoard
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Rectangle x:Name="MyRectangle" Width="100" Height="100" Fill="Aqua"></Rectangle>
<Button Grid.Row="1" Content="Animate" Click="ButtonBase_OnClick"/>
</Grid>
private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
var translate_x = new DoubleAnimation()
{
From = 0,
To = 100,
Duration = TimeSpan.FromSeconds(5),
};
var translate_y = new DoubleAnimation()
{
From = 0,
To = 100,
Duration = TimeSpan.FromSeconds(5),
};
var scale_x = new DoubleAnimation()
{
From = 1,
To = 2,
Duration = TimeSpan.FromSeconds(5),
}; …Run Code Online (Sandbox Code Playgroud) 在C#代码中,如果Rebar类派生自Reinforcement类,则RebarShape类继承ReinforcementShape该类.是否可以使用类覆盖ReinforcementShape基类中的RebarShape属性?
public class ReinforcementShape
{
}
public class RebarShape : ReinforcementShape
{
}
public class Reinforcement
{
public ReinforcementShape Shape { get; set; }
}
public class Rebar : Reinforement
{
// I want to override the Shape property
// but with its derived class which is RebarShape
// override the base property somehow!
public RebarShape Shape { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
更新:
当前的实施有什么问题?
在基地:
public virtual ReinforcementShape …Run Code Online (Sandbox Code Playgroud) c# ×10
wpf ×6
.net ×2
inheritance ×2
animation ×1
blink ×1
blurry ×1
class ×1
composition ×1
distinct ×1
group-by ×1
interface ×1
linq ×1
list ×1
polymorphism ×1
properties ×1
static ×1
storyboard ×1
tooltip ×1
winforms ×1