在制作专门用于在iPhone上观看的网页/网站/应用程序时,有没有人对我有任何好的起点?
我看过Joe Hewitt所制作的模板,还看到了我可以购买的一些模板,我还没有完成.
我想其他人已经开始在这条赛道上,并决定我可能会汲取他们新发现的知识:)
那么,有没有人有任何指针?我很清楚这样的模板/框架使得Web应用程序看起来像本机iPhone应用程序的问题越多,我就越有可能遇到麻烦,因为它不是,但是现在我想要我可以开始构建一个框架,然后在此过程中弄清楚如何使其与众不同,以便被视为Web应用程序以及看起来像本机iPhone应用程序.
具体来说,我正在寻找以下功能:
编辑:为了避免人们只阅读问题并回答,在阅读我的其他回复之前,我将在此处添加我对GPL许可和类似问题的澄清.
我需要使用的框架不能在许可证下分发,这需要我根据类似的许可证授权我自己的项目.GPL许可证系列允许有关库使用的例外,但这不适用于此,因为必要时,我需要使用的框架类型将是所有源代码.
该项目可以轻松容纳商业图书馆.
此外,我不需要像这样的库或框架,看起来很好并且不会过度混淆的示例文件也是受欢迎的.
我有一个流畅的IoC容器注册过程接口,其中包含一些用于构建注册的类.
例如,我可以这样做:
builder.Register<IFoo>().From.ConcreteType<Foo>();
Run Code Online (Sandbox Code Playgroud)
但是,在点之后的每个步骤中,会弹出intellisense,显示Object类,GetHashCode,Equals,GetType和ToString中的四种标准方法.
我尝试在几个类中重写这些方法,将EditorBrowsableAttribute属性附加到每个类,但它们仍然显示出来.我没有办法隐藏它们吗?
请注意,我并不是试图将它们隐藏在类本身之外,只是来自intellisense.
基本上,我喜欢这个:
+---------------+
builder.Register<IFoo>().|As |
|By |
|Equals | <-- remove this
|From |
|GetHashCode | <-- and this
|GetType | <-- as well as this
|ToString | <-- and finally this
+---------------+
Run Code Online (Sandbox Code Playgroud)
这是我在返回的类中尝试的内容Register<T>:
[EditorBrowsable(EditorBrowsableState.Never)]
public override Boolean Equals(Object obj)
{
return base.Equals(obj);
}
[EditorBrowsable(EditorBrowsableState.Never)]
public override Int32 GetHashCode()
{
return base.GetHashCode();
}
[EditorBrowsable(EditorBrowsableState.Never)]
public override String ToString()
{
return base.ToString();
}
Run Code Online (Sandbox Code Playgroud)
这显然不起作用.还有什么我可以尝试的吗?
我还尝试添加一个新方法,而不是重写Object,并将相同的属性应用于该方法,并且也显示出来,所以显然该属性没有按照我的想法做.
我注意到文档中的注释没有从同一个程序集中隐藏东西,但我尝试创建一个新项目,它们仍然显示在那里.
我有一个没有禁用/启用支持文本的控件,所以我需要在其中构建它.
问题很简单:如果我想选择正确的系统颜色,以便此控件具有与相邻禁用标签相同的禁用文本颜色,我应该选择哪种系统颜色?我已经尝试了一些,似乎没有一个,它们要么太轻或太暗.
换句话说,假设存在ForeColor属性,我应该在这里写什么:
myDefunctLabel.ForeColor = SystemColors.???;
Run Code Online (Sandbox Code Playgroud) 我正在使用WINDBG来分析转储文件,以查找内存使用率过高的程序.
其中一个涉及的对象是持有一个对象数组,引用我想看的很多对象,试图找出它们被分配的原因.
这是我尝试过的:
首先,我的ServiceContainer对象集合:
0:000> !do 05633014
Name: System.Collections.Generic.List`1[[LVK.IoC.ServiceContainer, LVK.Core]]
MethodTable: 08b3c7fc
EEClass: 6f70ca78
Size: 24(0x18) bytes
(C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll)
Fields:
MT Field Offset Type VT Attr Value Name
6f924324 40009d8 4 System.Object[] 0 instance 1da226ec _items
6f952da0 40009d9 c System.Int32 1 instance 5356 _size
6f952da0 40009da 10 System.Int32 1 instance 5538 _version
6f950770 40009db 8 System.Object 0 instance 00000000 _syncRoot
6f924324 40009dc 0 System.Object[] 0 shared static _emptyArray
>> Domain:Value dynamic statics NYI
002b2a28:NotInit <<
Run Code Online (Sandbox Code Playgroud)
那个_items数组是我想看的那个,所以我发出了这个命令:
0:000> !do 1da226ec …Run Code Online (Sandbox Code Playgroud) 我意识到关于动画和进度条的SO还有其他问题,但它们似乎围绕着摆脱进度条上绘制的动画,即.旅行的亮点.
我想要做的是摆脱我设置进度条的新值时使用的动画.我现在遇到的问题是正在运行的操作完成,然后进度条在操作完成后继续增加到最大位置.
换句话说,如果我将进度条的Value属性设置为50,我希望它立即前进到中途位置(如果max是100),而不是像现在那样慢慢地将进度条建立到该位置.
如果确实有一个关于SO的问题已经处理过这个问题,那么关闭就像重复一样,我会高兴地删除它,但我找不到任何问题.
这是我发现的那个:禁用WinForms ProgressBar动画,它处理动画的高亮,这不是我所说的.
这是一个简单的LINQPad演示,它显示了这个问题:
void Main()
{
using (var fm = new Form())
{
var bt = new Button
{
Text = "Start",
Location = new Point(8, 8),
Parent = fm,
};
var pb = new ProgressBar
{
Top = bt.Top + bt.Height + 8,
Width = fm.ClientRectangle.Width - 16,
Left = 8,
Parent = fm
};
bt.Click += (s, e) =>
{
bt.Enabled = false;
Thread t = …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个应用程序,该应用程序将在类似呼叫中心的列表上发起对优先级为1的联系人的呼叫.
然后,如果该联系人没有回答(让我们忘记在这里回答机器的整个问题),我想打电话给优先级2联系人,依此类推,直到他们中的一个回答或我耗尽我的名单.
这可能吗?
我尝试过以下方法:
CTCallCenter.CallEventHandler事件,并检查呼叫状态CTCallStateConnected和CTCallStateDisconnected,我得到它来响应呼叫断开的事实,没有连接,然后尝试启动另一个呼叫,就像我做的第一次,但第二次尝试只是坐死在水里.DidEnterBackground方法,并定期检查CTCall.CallState属性,基本上再次尝试响应从未连接的断开连接,但这似乎不起作用在尝试下一次拨号之前检测到断开状态后,我还尝试添加一个短暂的延迟(1秒,2.5秒和10秒),以允许电话应用程序在中止呼叫后"安定下来",这没有任何改变.
在 C# 12 中,我们获得了普通类的主构造函数。
考虑以下代码:
new Derived("XXX").Test();
public class Base(string name)
{
protected void Log() => Console.WriteLine("Base: " + name);
}
public class Derived(string name) : Base(name)
{
public void Test()
{
base.Log();
Console.WriteLine("Derived: " + name);
}
}
Run Code Online (Sandbox Code Playgroud)
string name这会对主构造函数的参数发出以下警告Derived:
Program.cs(8,42):警告 CS9107:参数“字符串名称”被捕获到封闭类型的状态中,并且其值也传递给基本构造函数。该值也可能由基类捕获。
我怎样才能避免这个警告,我应该使用编译指示来消除它吗?或者有更好的方法来避免吗?是不是代码写错了?我不确定我是否能看到替代方案,除了放弃主要构造函数并将整个内容重写为:
new Derived("XXX").Test();
public class Base
{
protected readonly string _name;
protected Base(string name)
{
_name = name;
}
protected void Log() => Console.WriteLine("Base: " + _name);
}
public class Derived : Base
{ …Run Code Online (Sandbox Code Playgroud) 我想调整我的类库的TeamCity构建配置的输出,以便生成的dll文件具有以下版本号:3.5.0.x,其中x是TeamCity拾取的subversion版本号.
我发现我可以使用BUILD_NUMBER环境变量来获取x,但不幸的是我不明白我还需要做什么.
我发现所有的"教程"都说"你只是将它添加到脚本中",但他们没有说出哪个脚本,而"this"通常是指MSBuild社区扩展中的AssemblyInfo任务.
我是否需要以某种方式构建自定义MSBuild脚本才能使用它?"脚本"是否与解决方案文件或C#项目文件相同?
我根本不了解MSBuild进程,除了我可以直接将解决方案文件传递给MSBuild,但我需要添加到"脚本"的是XML,解决方案文件看起来不像XML.
那么,有人能指出我如何使这项工作的分步指南?
这就是我最终得到的结果:
编辑我的核心类库的.csproj文件,并更改底部,使其显示为:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
<AssemblyInfo Condition=" '$(BUILD_NUMBER)' != '' "
CodeLanguage="CS"
OutputFile="$(MSBuildProjectDirectory)\..\GlobalInfo.cs"
AssemblyVersion="3.5.0.0"
AssemblyFileVersion="$(BUILD_NUMBER)" />
</Target>
<Target Name="AfterBuild">
Run Code Online (Sandbox Code Playgroud)
更改我的所有AssemblyInfo.cs文件,以便它们不指定AssemblyVersion或AssemblyFileVersion(回想起来,我将考虑将AssemblyVersion放回去)
现在,只有在设置环境变量BUILD_NUMBER时才会更新GlobalInfo.cs,这是我通过TeamCity构建的时候.
我选择保持AssemblyVersion不变,以便引用仍然有效,并且只更新AssemblyFileVersion,以便我可以看到dll来自哪个构建.
我正在为我的IoC类库重写我的流畅界面,当我重构一些代码以便通过基类共享一些常用功能时,我遇到了麻烦.
注意:这是我想要做的事情,而不是我必须做的事情.如果我必须使用不同的语法,我会,但如果有人知道如何使我的代码按我想要的方式编译,那将是非常受欢迎的.
我希望某些扩展方法可用于特定的基类,并且这些方法应该是通用的,具有一个泛型类型,与方法的参数相关,但是这些方法也应该返回与特定后代相关的特定类型.被引用.
使用代码示例比上面的描述更好.
这是一个简单而完整的例子,它不起作用:
using System;
namespace ConsoleApplication16
{
public class ParameterizedRegistrationBase { }
public class ConcreteTypeRegistration : ParameterizedRegistrationBase
{
public void SomethingConcrete() { }
}
public class DelegateRegistration : ParameterizedRegistrationBase
{
public void SomethingDelegated() { }
}
public static class Extensions
{
public static ParameterizedRegistrationBase Parameter<T>(
this ParameterizedRegistrationBase p, string name, T value)
{
return p;
}
}
class Program
{
static void Main(string[] args)
{
ConcreteTypeRegistration ct = new ConcreteTypeRegistration(); …Run Code Online (Sandbox Code Playgroud) 我试着在这里找到解决方案,但是只有我自己/选定文件的解决方案,而不是我调用选择器时的代码.用户按下按钮时我使用以下代码:
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
ActivityCurrent.this.startActivityForResult(intent,999);
Run Code Online (Sandbox Code Playgroud)
这个节目铃声选择器,用户可以选择想要的铃声,但我想念两件事: - 它打开时不显示当前铃声 - 点击OK时不保存铃声OK
我仍然无法找到如何用已选择的当前铃声打开RINGTONE_PICKER.任何的想法?
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Select ringtone for notifications:");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE,RingtoneManager.TYPE_NOTIFICATION);
ActivityCurrent.this.startActivityForResult(intent,999);
Run Code Online (Sandbox Code Playgroud)