Много игр, выпущенных , Игры ABA записаны в D 1.x, хотя я предполагаю, что консольные порты должны были быть переписаны в C++.
я записал довольно много игровых прототипов в D, но я не уверен, квалифицирует ли это как 'реальный мир', так как я записал им для моего собственного преимущества и никогда не выпускал ни одного из них.
Я не верю, что он поддерживает такое поведение. Вы можете проголосовать за него на CodePlex. В зависимости от того, что вы хотите, вы можете либо посмотреть здесь некоторые обходные пути Тима Хойера , либо использовать другой настраиваемый элемент управления, например Silverlight Modal Control (на CodePlex) .
.Вы можете ' Не делайте то, что вы пытаетесь сделать в Silverlight. Любые изменения, которые вы вносите в пользовательский интерфейс, будут выполняться в потоке пользовательского интерфейса. Если вы заблокируете поток пользовательского интерфейса, пользователь не сможет взаимодействовать с браузером, поэтому они не могут предпринять никаких действий, чтобы разблокировать поток.
Если вы действительно хотите создать блокирующее диалоговое окно, единственный способ сделать это - из потока без пользовательского интерфейса. Например, вы можете создать метод, который выглядит примерно так:
private void ShowModalDialog()
{
AutoResetEvent waitHandle = new AutoResetEvent(false);
Dispatcher.BeginInvoke(() =>
{
ChildWindow cw = new ChildWindow();
cw.Content = "Modal Dialog";
cw.Closed += (s, e) => waitHandle.Set();
cw.Show();
});
waitHandle.WaitOne();
}
Этот метод будет отображать диалоговое окно и не вернется, пока диалоговое окно не будет закрыто. Но этот метод можно вызвать только из не-UI-потока . Вызов его из потока пользовательского интерфейса вызовет взаимоблокировку (поскольку поток пользовательского интерфейса ожидает события, которое может сработать только в потоке пользовательского интерфейса).
В качестве альтернативы вам следует подумать о том, чтобы сделать вашу логику асинхронной, а не заставлять ее быть синхронным.
вы можете создать метод, который выглядит примерно так: private void ShowModalDialog()
{
AutoResetEvent waitHandle = new AutoResetEvent(false);
Dispatcher.BeginInvoke(() =>
{
ChildWindow cw = new ChildWindow();
cw.Content = "Modal Dialog";
cw.Closed += (s, e) => waitHandle.Set();
cw.Show();
});
waitHandle.WaitOne();
}
Этот метод будет отображать диалоговое окно и не вернется, пока диалоговое окно не будет закрыто. Но этот метод можно вызвать только из не-UI-потока . Вызов его из потока пользовательского интерфейса вызовет взаимоблокировку (поскольку поток пользовательского интерфейса ожидает события, которое может сработать только в потоке пользовательского интерфейса).
В качестве альтернативы, вам следует подумать о том, чтобы сделать вашу логику асинхронной, а не заставлять ее быть синхронным.
вы можете создать метод, который выглядит примерно так: private void ShowModalDialog()
{
AutoResetEvent waitHandle = new AutoResetEvent(false);
Dispatcher.BeginInvoke(() =>
{
ChildWindow cw = new ChildWindow();
cw.Content = "Modal Dialog";
cw.Closed += (s, e) => waitHandle.Set();
cw.Show();
});
waitHandle.WaitOne();
}
Этот метод будет отображать диалоговое окно и не вернется, пока диалоговое окно не будет закрыто. Но этот метод можно вызвать только из не-UI-потока . Вызов его из потока пользовательского интерфейса вызовет взаимоблокировку (поскольку поток пользовательского интерфейса ожидает события, которое может сработать только в потоке пользовательского интерфейса).
В качестве альтернативы, вам следует подумать о том, чтобы сделать вашу логику асинхронной, а не заставлять ее быть синхронным.
вам следует подумать о том, чтобы сделать вашу логику асинхронной, а не заставлять ее быть синхронной. вам следует подумать о том, чтобы сделать вашу логику асинхронной, а не заставлять ее быть синхронной.Я постарался создать "блокирующий" модальный диалог, имея настраиваемый элемент управления, который имеет вертикальное и горизонтальное выравнивание как stretch, а затем добавил его как дочерний элемент макета текущего элемента управления.
например
например
<Grid x:Name="LayoutRoot" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Rectangle Fill="LightBlue" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Opacity="0.3" />
</Grid>
, а затем в настраиваемом элементе управления
Utilities.UITools.MessageBox x = new Utilities.UITools.MessageBox();
x.SetError(e.Result);
this.LayoutRoot.Children.Add(x);
В зависимости от того, что должно отображаться в модальном окне, я динамически добавляю элементы управления в модальный макет. Ясно, что решение не изящное, но, по крайней мере, оно работает.