Как обновить Динамический Ресурс в Динамическом Ресурсе?

Использование std::less достаточно (но использование operator< не достаточно). Специализации указателей из std::less (как указывает принятый ответ на «Использование std :: less with nullptr» ) гарантируют полное упорядочение . Сравнение с nullptr является неопределенным , что означает, что стандарт не налагает конкретное упорядочение, но std::less должен все же произвести полное упорядочение (и для данный указатель p, p < nullptr обязательно выдает одно и то же значение каждый раз).

Так как полное упорядочение сильнее, чем слабое, в вашем случае достаточно использовать std::less.

РЕДАКТИРОВАТЬ: Если нет, то как правильно (например, как объединить std :: less с std :: tie)?

blockquote>

К сожалению, не существует изящного способа. Поскольку std::tie возвращает std::tuple, и сравнение кортежей определяется в терминах operator< по их значениям (а не std::less), вы не можете использовать здесь std::tie. Чтобы использовать std::less, вам нужно будет сделать это вручную:

bool operator<(const Foo& rhs) const {
  if (std::less<>{}(x, rhs.x))
    return true;
  if (std::less<>{}(rhs.x, x))
    return false;
  return std::less<>{}(y, rhs.y);
}

Кроме того, ваша текущая реализация (переосмысление указателей как целых чисел) также производит полное упорядочение (очевидно, поскольку вы сравниваете целые числа), но вместо неопределенного поведения у вас будет определяемое реализацией поведение (из reinterpret_cast).

7
задан RoguePlanetoid 17 February 2009 в 19:51
поделиться

2 ответа

Если я не неправильно понимаю ситуацию, точно что Вы говорите о работах вполне прилично. Я просто испытал его с этим Xaml:

<Window x:Class="ConditionalTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <SolidColorBrush x:Key="MyColor" Color="Aqua" />

        <VisualBrush x:Key="MyBrush">
            <VisualBrush.Visual>
                <Ellipse Height="50" Width="100" Fill="{DynamicResource MyColor}" />
            </VisualBrush.Visual>
        </VisualBrush>
    </Window.Resources>
    <Grid Background="{DynamicResource MyBrush}">
        <Button Height="30" Width="Auto" VerticalAlignment="Center" HorizontalAlignment="Center" Content="ChangeColor" Click="Button_Click" />
    </Grid>
</Window>

И затем измененный цвет в обработчике щелчков для той кнопки:

private void Button_Click(object sender, RoutedEventArgs e)
{
    ((SolidColorBrush)Resources["MyColor"]).Color = Colors.Purple;
}  

И это работало как чемпион.

6
ответ дан 7 December 2019 в 10:08
поделиться

Можно ли отправить пример того, как Вы пытаетесь изменить цвет в словаре ресурса?

Когда я делаю демонстрационное приложение и попытку изменить значение ресурса, кажется, что SolidColorBrush в словаре ресурса был заморожен так, это не может быть изменено. Для обхождения этого, я просто установил новое значение к новому SolidColorBrush.

0
ответ дан 7 December 2019 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: