冰淇淋三明治:
我想通过标准的Action View机制向ActionBar 添加一个AutoCompleteTextView(因为SearchView在ICS之前不可用,我也在使用ActionBarSherlock):
<item android:id="@+id/menu_search" android:actionViewClass="com.example.AutoCompleteActionView" android:showAsAction="ifRoom" android:title="@string/address"></item>
<item android:id="@+id/menu_close" android:icon="@drawable/ic_menu_close_clear_cancel" android:showAsAction="always"></item>
<item android:id="@+id/menu_ok" android:icon="@drawable/ic_menu_ok" android:showAsAction="always"></item>
Run Code Online (Sandbox Code Playgroud)
这可行,但默认情况下它不会占用ActionBar中的可用空间,我想要这样做.
我查看了SearchView的源代码,看了它如何覆盖onMeasure,并为我自己的类做了同样的事情,我从AutoCompleteTextView派生.当我这样做时,AutoCompleteTextView消耗所有空间,没有空间用于我想要显示在其右侧的两个菜单项.
当MeasureSpec.getMode()为MeasureSpec.AT_MOST时,看起来MeasureSpec.getSize()返回的宽度没有考虑其他两个菜单项.
有人做过类似的事吗?有什么建议?
谢谢,达米安
我在Windows Phone 7上使用Silverlight.
我想以粗体显示TextBlock中某些文本的第一部分,其余部分以普通字体显示.完整的文字必须包装.我希望粗体部分包含来自ViewModel中一个属性的文本,而纯文本则包含来自不同属性的文本.
TextBlock在与LongListSelector关联的DataTemplate中定义.
我最初的尝试是:
<TextBlock TextWrapping="Wrap">
<TextBlock.Inlines>
<Run Text="{Binding Property1}" FontWeight="Bold"/>
<Run Text="{Binding Property2}"/>
</TextBlock.Inlines>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
这在运行时因失败的"AG_E_RUNTIME_MANAGED_UNKNOWN_ERROR"而失败.这是一个已知问题,因为Run元素不是FrameworkElement而且无法绑定.
我的下一个尝试是将占位符放在适当的位置,然后在代码中更新它们:
<TextBlock Loaded="TextBlockLoaded" TextWrapping="Wrap">
<TextBlock.Inlines>
<Run FontWeight="Bold">Placeholder1</Run>
<Run>Placeholder2</Run>
</TextBlock.Inlines>
</TextBlock>
Run Code Online (Sandbox Code Playgroud)
在代码隐藏中(是的,我是绝望的!):
private void TextBlockLoaded(object sender, RoutedEventArgs e)
{
var textBlock = (TextBlock)sender;
var viewModel = (ViewModel)textBlock.DataContext;
var prop1Run = (Run)textBlock.Inlines[0];
var prop2Run = (Run)textBlock.Inlines[1];
prop1Run.Text = viewModel.Property1;
prop2Run.Text = viewModel.Property2;
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但因为我正在使用LongListSelector,虽然项目被回收,但是Loaded codebehind事件处理程序不会重新初始化运行,所以很快就会显示错误的文本......
我已经看过使用LongListSelector的Linked事件(我已经用它来释放我在列表中显示的图像),但我看不出如何使用它来重新初始化Runs的文本属性.
任何帮助赞赏!
我的后台代理程序达到6MB内存限制,我想了解正在分配的对象.
原则上我可以使用Visual Studio Windows Phone性能分析工具执行此操作,但是我不知道如何在后台代理上运行此操作,仅在主应用程序上运行.
任何人都知道如何在后台代理上运行Visual Studio Windows Phone性能分析工具?
我在WP7上加载XML,我发现如果我在XML声明和doctype之间没有换行符,即使我忽略了doctype,我也会得到一个InvalidOperationException.在桌面上我没有这样的错误.
我的代码:
private static void Example()
{
const string works =
@"<?xml version=""1.0""?>
<!DOCTYPE example SYSTEM ""http://example.com/example.dtd""><hello></hello>";
const string fails =
@"<?xml version=""1.0""?><!DOCTYPE example SYSTEM ""http://example.com/example.dtd""><hello></hello>";
var textReader = new StringReader(works);
var xmlReaderSettings = new XmlReaderSettings {DtdProcessing = DtdProcessing.Ignore,};
var xmlReader = XmlReader.Create(textReader, xmlReaderSettings);
XDocument.Load(xmlReader); // No problem here
textReader = new StringReader(fails);
xmlReader = XmlReader.Create(textReader, xmlReaderSettings);
XDocument.Load(xmlReader); // Fails here
}
Run Code Online (Sandbox Code Playgroud)
第二个XDocument.Load失败并出现InvalidOperationException,并且消息XmlReader不应位于XmlDeclaration类型的节点上.唯一的区别是第二种情况下没有新线.
有没有人见过这个,并找到了解决方法?这适用于桌面btw - 在WP7上失败.在我的实际情况中,我正在从流中读取XML,因此在正确的位置手动注入新行并不是那么容易.
达米安
我正在创建一个具有前台应用程序(当然)以及PeriodicTask和ResourceIntensiveTask的应用程序.
如果用户在运行时启动应用程序本身,我需要一种方法来关闭计划任务.
我没有看到任何方法使用系统范围的互斥锁.理想情况下,当后台任务开始时,一个线程将被旋转,以侦听来自前台应用程序的信号,如果它收到此信号,它可以干净地关闭后台任务.
除了轮询(比如某个特定文件的文件夹)之外,是否有人对我的前台应用程序如何发出后台应用程序启动后我的后台代理关闭信号提出了一个干净的建议?
我正朝着插座方向前进,但这似乎有点过分了.
背景: 我目前正在使用IsolatedStorage存储我的数据(而不是数据库) - 最终我将转向使用数据库.
我的前台应用程序将本地数据与Web服务同步,并在从Web服务添加新项目时更新UI.我使用我寻找的文件来查找数据项,并在新项目同步时附加到该文件中.
我希望运行后台代理以在后台执行此同步,更新隔离存储中的文件,包括索引等.但是一旦我启动前台应用程序,我需要后台应用程序停止,以便前景和后台不要同时尝试更新相同的文件.
我一次只需要一个进程来更新本地数据,我需要前台进程来抢占后台进程.