Tag: 设计

如何在Windows窗体中创建垂直导航栏?

我正在研究我的学校项目,Windows表单应用程序。 正如你所见,我创建了3个面板,一个用于标题,一个用于导航栏,一个用于内容。 我可以将标题和导航栏静态化,例如网页中的布局,以及更改btn点击内容。 我创建了几个面板,并为每个面板更改可见性(true / false)以显示特定面板。 有没有更好的做到这一点,我认为它必须更优雅,我开始,它的学校项目和我找到聪明的答案。

不可变还是不可变?

好吧,据我所知, 不可变类型本质上是线程安全的,所以我在不同的地方读过,我想我明白为什么会这样。 如果在创建对象后无法修改实例的内部状态,则对实例本身的并发访问似乎没有问题。 因此,我可以创建以下List : class ImmutableList: IEnumerable { readonly List innerList; public ImmutableList(IEnumerable collection) { this.innerList = new List(collection); } public ImmutableList() { this.innerList = new List(); } public ImmutableList Add(T item) { var list = new ImmutableList(this.innerList); list.innerList.Add(item); return list; } public ImmutableList Remove(T item) { var list = new ImmutableList(this.innerList); list.innerList.Remove(item); return […]

C#Metro(XAML):为任何(%)屏幕设计页面

我创建了一个媒体播放器,它在MainPage上有两个(主要)东西:页面左侧的ListView(用于播放列表)和覆盖页面右侧的MediaElement(用于音频和video)。 此外,页面的底部是空的,因为我正在使用AppBar,我有控件(播放,暂停,停止,音量,下一个,上一个,随机播放,重复,全屏等)。 在ListView上方,我有4个按钮,用于从ListView添加/删除文件。 问题是 : 当应用只在屏幕的一半时: ListView的宽度非常小,歌曲/video的标题是4-5行 MediaElement的宽度也非常小,它会丢失video的部分+它会破坏宽高比 当应用仅占屏幕的1/4(四分之一)时: ListView的宽度非常小,如果没有滚动,我看不到超过2-3首歌曲 我只看到在MediaElement上播放的video的一半 AppBar上的按钮发生碰撞 ListView顶部的按钮占据了屏幕的1/3(三分之一) 要解释一下我的页面设计 : 整个页面有一个Grid,有两行:在第一行,屏幕上的所有内容都有主网格,第二行只是AppBar的空间 我之前讨论过的主要网格是整个页面的两列: 在页面的第一列,我有MediaElement, Width=”800″ Height=”450″ 。 我知道使用像素设置宽度和高度不是一个好主意,但我不知道如何以另一种方式做到这一点 – 在第二列我有另外一个2行网格: 第一行包含一个VariableSizedWrapGrid,ListView顶部有4个按钮 第二行包含带有模板的ListView(Margin =“6,20”): 我还有包含2行网格的AppBar: 在第一行我有一个滑块: (滑块也讨厌宽度=“1000”属性,特别是当它在屏幕的1/4处时) 在第二行我有另一个Grid有两列,每列包含一个StackPanel按钮: 我跳得像: 在屏幕的1/2处:MediaElement位于页面顶部,ListView与页面底部的4个按钮 在1/4 pf的屏幕上:只有ListView和它上面的按钮可见(antListView中的文字会更小) 我已经看到Windowsapp store中的应用程序可以从全屏变为屏幕的1/2,所以它是可能的。 请帮助我这些人,我不是设计师,但我希望我的应用程序在页面的任何%上看起来都很好。

多表单应用程序显示和隐藏表单的最佳实践?

StackOverflow上有很多问题,询问如何隐藏Form1并显示Form2。 并且,通常会出现一些不同的答案: 1) // Program.cs Application.Run(new Form1()); // Form1.cs Form2 form2 = new Form2(); form2.Show(); this.Hide(); 2) // Program.cs Form1 form1 = new Form1(); Form2 form2 = new Form2(); form1.Show(); form2.Show(); Application.Run(); …etc.. 我不是在寻找像#1这样简单的一次性解决方案。 我正在寻找最佳的表单管理实践。 一个5-8种forms的应用程序,经常打开和关闭 – 管理这些表单的最佳方法是什么? 我的想法是让每个表单成为一个(懒惰?)Singleton并将它们埋没在某种FormsManager类中(比如解决方案#2但是++)。 然后单个表单可能会调用类似FormsManager.GetForm() 。 但我想知道有更多经验的人使用过什么。 同样,这些解决方案不应该是快速破解。 它们应该是面向设计的 ,可能是架构的 ,也是长期的解决方案 。 编辑: 对于可能遇到同样问题的人来说,这是一个非常通用的问题(因此要求非常开放)。 具体到我的情况,我不需要在启动时显示多个表单。 另外,我没有MDI表格。 我可能有一些模态forms,但它们大多是非模态的。

用户控件在设计时作为容器

我正在设计一个简单的扩展器控件。 我派生自UserControl,绘制内部控件,构建,运行; 一切都好。 由于内部控件是Panel,我想在设计时将其用作容器。 的确,我使用了以下属性: [Designer(typeof(ExpanderControlDesigner))] [Designer(“System.Windows.Forms.Design.ParentControlDesigner, System.Design”, typeof(IDesigner))] 太棒了,我说。 但它不是…… 结果是我可以在设计时将它用作容器,但是: 添加的控件返回已嵌入用户控件中的内部控件 即使我在设计时将顶部控件添加到顶部,在运行时也会再次返回嵌入到用户控件的控件 我无法在设计时将容器区域限制为Panel区域 我错过了什么? 这是完整性的代码…为什么这段代码不起作用? [Designer(typeof(ExpanderControlDesigner))] [Designer(“System.Windows.Forms.Design.ParentControlDesigner, System.Design”, typeof(IDesigner))] public partial class ExpanderControl : UserControl { public ExpanderControl() { InitializeComponent(); …. [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = “FullTrust”)] internal class ExpanderControlDesigner : ControlDesigner { private ExpanderControl MyControl; public override void Initialize(IComponent component) { base.Initialize(component); MyControl = […]

string.Clone()有什么用?

有两个代码示例:#1 string str1 = “hello”; string str2 = str1; //reference to the same string str1 = “bye”; //new string created 和#2 string str3 = “hello”; string str4 = (string)str3.Clone();//reference to the same string str3 = “bye”;//new string created 看起来他们是相同的不是吗? 那么使用Clone()有什么好处? 当我不能使用代码#1而不是代码#2时,你能给我一个例子吗?

为什么一个类显式实现IDisposable而不是隐式?

我使用的是FtpWebResponse类,但没有看到Dispose方法。 事实certificate ,该类实现了IDisposable,但是明确地这样做,因此在调用Dispose之前必须先将实例强​​制转换为IDisposable: // response is an instance of FtpWebResposne ((IDisposable) response).Dispose(); 为什么像这样的类的设计者会选择明确地实现IDisposable? 正如Anthony Pegram所说 ,以这种方式做事掩盖了这样一个事实,即对象应该为每次使用课程时都没有查阅文档的普通开发人员处理。