Squiggs Ответов: 1

Компания MSI отсортированный выбора комбобокса


Я использую набор инструментов Windows Installer XML (WiX) версии 3.10.2. Когда я создаю ComboBox с элементами, имеющими похожий текст, выбор через пользовательский интерфейс работает не так, как ожидалось. В качестве примера я создал следующий список:

Значение / Текст
1 / текст 10000
2 / текст 5000
3 / текст 2000
4 / текст 1000
5 / текст 500
6 / текст 100

Выбор значений 1, 2 и 3 работает, как и ожидалось. При выборе значений 4 и 6 отображается текст значения 1. При выборе значения 5 отображается текст значения 2.

Я заметил, что установка Sorted="no" не имеет такого странного поведения. Однако это не вариант для моего проекта.

Что я упускаю?

Кто-то подал выпуск №4069 с командой WiX. Он был закрыт как не связанный с WiX; это поведение контролируется MSI и / или Windows. Однако никаких дальнейших рекомендаций по урегулированию не последовало.

Что я уже пробовал:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
	<Product Id="*" Name="WiX_ComboBox" Language="1033" Version="1.0.0.0" Manufacturer="Example Company" UpgradeCode="c45d2b80-fc84-48a2-a29c-46e781d26461">
		<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

		<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
		<MediaTemplate />

		<UIRef Id="WixUI_Common"/>
    <UIRef Id="CustomUi"/>
    <UIRef Id="WixUI_ErrorProgressText"/>

    <Property Id="BADCMBVAL1" Value="1" />
	</Product>

  <Fragment>
    <UI>
      <Dialog Id="BadComboBoxDlg" Width="370" Height="270" Title="Bad Combo Box" NoMinimize="yes">
        <Control Id="BadComboBox1" Type="ComboBox" X="100" Y="186" Width="100" Height="16" ComboList="yes" Sorted="yes" Property="BADCMBVAL1">
          <ComboBox Property="BADCMBVAL1">
            <ListItem Value="1" Text="TEXT 10000"/>
            <ListItem Value="2" Text="TEXT 5000"/>
            <ListItem Value="3" Text="TEXT 2000"/>
            <ListItem Value="4" Text="TEXT 1000"/>
            <ListItem Value="5" Text="TEXT 500"/>
            <ListItem Value="6" Text="TEXT 100"/>
          </ComboBox>
        </Control>

        <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" />
        <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)" />
        <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
          <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
        </Control>
      </Dialog>
    </UI>
  </Fragment>

  <Fragment>
    <UI Id="CustomUi">
      <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
      <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
      <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />

      <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
      <Property Id="WixUI_Mode" Value="Mondo" />

      <DialogRef Id="ErrorDlg" />
      <DialogRef Id="FatalError" />
      <DialogRef Id="FilesInUse" />
      <DialogRef Id="MsiRMFilesInUse" />
      <DialogRef Id="PrepareDlg" />
      <DialogRef Id="ProgressDlg" />
      <DialogRef Id="ResumeDlg" />
      <DialogRef Id="UserExit" />


      <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>

      <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="BadComboBoxDlg">1</Publish>

      <Publish Dialog="BadComboBoxDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
      <Publish Dialog="BadComboBoxDlg" Control="Next" Event="SpawnDialog" Value="CancelDlg">1</Publish>
    </UI>
  </Fragment>
</Wix>

1 Ответов

Рейтинг:
7

Squiggs

Похоже, что MSI имеет проблемы с выполнением сравнения строк для текста ComboBox различной длины. Таким образом, обходной путь состоит в том, чтобы изменить текст так, чтобы он имел одинаковую длину. Заполняя концы каждого текстового поля, вы сохраняете желаемый внешний вид:

<Control Id="BadComboBox1" Type="ComboBox" X="100" Y="186" Width="100" Height="16" ComboList="yes" Sorted="yes" Property="BADCMBVAL1">
  <ComboBox Property="BADCMBVAL1">
    <ListItem Value="1" Text="TEXT 10000"/>
    <ListItem Value="2" Text="TEXT 5000 "/>
    <ListItem Value="3" Text="TEXT 2000 "/>
    <ListItem Value="4" Text="TEXT 1000 "/>
    <ListItem Value="5" Text="TEXT 500  "/>
    <ListItem Value="6" Text="TEXT 100  "/>
  </ComboBox>
</Control>